Blogi

Käytännön vinkkejä kestävämpään ohjelmistokehitykseen

Tatu Helander Bisnes Teknologia

Kehittäjä Tatu istuu koneen ääressä. Green-mobile

Ilmastonmuutos ja sen mukanaan tuomat muutokset ahdistavat. Päässäni on muhinut kysymys siitä, mitä voin tehdä ohjelmistokehittäjän työssäni, etten ainakaan pahenna tilannetta. Millaisia valintoja voin tehdä? Onko edes olemassa hyviä vaihtoehtoja? Pitkin kevättä ja kesää olen perehtynyt aiheeseen pintaraapaisua syvemmin. Vastaus edellä pohtimiini kysymyksiin on onneksi lohdullinen: paljon voidaan tehdä ja erilaisia keinoja vaikuttaa on useita.

Entä miksi tämä on tärkeää? Miksi meidän pitäisi pyrkiä tekemään ohjelmistoa, joka ottaa huomioon ilmastovaikutukset? Jos se, että maailma kirjaimellisesti palaa ja muuttuu ympärillämme entistä arvaamattomammaksi ei ole riittävä syy tehdä muutoksia, niin kerrottakoon, että kestävämpi ohjelmistokehitys ei ainoastaan auta hidastamaan ilmastonmuutosta, vaan on yleensä myös nopeampaa, käyttäjäystävällisempää ja kustannustehokkaampaa.

Millaisella energialla palvelusi tuotetaan?

Yksi suurimmista yksittäisistä tekijöistä, joka vaikuttaa ohjelmiston ympäristöystävällisyyteen on se, millä ja miten tuotetulla sähköllä se pidetään käynnissä. Kun ohjelmisto on omassa konesalissa, pääset suoraan vaikuttamaan siihen, mitä sähköä käytetään. Jos taas ohjelmisto on ajossa julkisessa pilvipalvelussa, pyri valitsemaan datakeskuksen lokaatio, joka käyttää mahdollisimman puhdasta energiaa. Osa pilvipalvelun tarjoajista kertoo avoimesti, mistä ja minkälaista energiaa heidän eri datakeskuksensa käyttävät. Jos tätä tietoa ei ole saatavilla, apuna päätöksessä voit käyttää Electricity Mapsin karttaa, joka kertoo, millä tavoin missäkin päin maailmaa energiaa on tuotettu.

Ilmastokulma osana koko ohjelmistoprojektia

Mistä lähteä liikkeelle pohtiessa, miten voimme optimoida sähkönkulutusta omassa ohjelmistossamme? Ihan ensimmäisenä tietysti siitä, että kehitetään ohjelmistoa vain oikeaan tarpeeseen. Vihrein ohjelmisto on se, mitä ei koskaan tehdä. Sen sijaan silloin, kun toteutetaan jotain palvelun uutta ominaisuutta, kokonaista ohjelmistoa tai päivitetään vanhaa, kannattaa ilmastovaikutukset ottaa huomioon alusta asti. Kuten monissa asioissa ohjelmistokehityksessä, tässäkin paras lopputulos saavutetaan, kun ilmastokulma on osana perusduunia.

Jo palvelumuotoilu- ja suunnitteluvaiheessa voidaan tehdä valintoja, jotka vaikuttavat suoraan ja välillisesti siihen, kuinka paljon energiaa ohjelmisto kuluttaa. En itse ole suunnittelija, joten jätetään näiden toimien pohtiminen aiheesta paremmin perillä olevien harteille. Kestävästä websuunnittelusta voi lukea lisää esimerkiksi Sustainable Web Designin sivuilta ja kirjasta.

Pohtiessani omia vaikutusmahdollisuuksia ohjelmistokehittäjänä, sain ajatuksen rakentaa saman sovelluksen useaan kertaan muutamalla eri teknologialla ja todistaa sen avulla, mikä on energiatehokasta ja mikä ei. Hetken aikaa pohdittuani totesin sen olevan kuitenkin kulutusta, mitä ei oikeasti tarvita. Ennen kaikkea siksi, koska keinot, joita kannattaa käyttää, ovat aina tapauskohtaisia.

Tässä muutamia keinoja, joita jokaisessa projektissa voi tehdä pienentääkseen ohjelmiston ympäristökuormaa.

Sammuta valot

Otetaan esimerkiksi tavallinen rajapinta, joka hakee tietokannasta tietoa, kun käyttöliittymä tai joku muu palvelu sitä kutsuu. Usein sovelluksen käyttö keskittyy tiettyyn aikaan vuorokaudesta, sen käyttö on satunnaista tai se tapahtuu esimerkiksi ryppäissä ja loput ajasta rajapinta on ajossa ilman mitään tekemistä. 

Pilvipalveluntarjoajat ovat jo pitkään tarjonneet erilaisia tapoja optimoida sovelluksen suoritusta. Tällöin sovellus käynnistyy silloin, kun sinne tulee pyyntöjä, ja mitä enemmän pyyntöjä tulee, sitä useampia uusia samanlaisia palveluita on mahdollista käynnistää palvelemaan kasvanutta kutsujen määrää, kun yksi palvelu ei riitä. Samalla toiminnallisuudella pystytään myös sammuttamaan palveluita, kun liikenne hiljenee tai kun on aikayksikkö, jolloin liikennettä ei ole ollenkaan. 

Optimoinnissa täytyy tottakai ottaa huomioon palvelulle asetetut vaatimukset, eikä sen sammuttaminen ole aina mahdollista. Jos tuotantoympäristöä ei voida sammuttaa kokonaan, kannattaa harkita, tarvitseeko testiympäristön olla kokoajan päällä. Optimoimalla säästetään niin sähköä kuin rahaa, kun kulutusta ei ole silloin, kun sille ei ole tarvetta.

Asenna vain se mitä käytät

Kuinka moni muistaa kouluajoilta mantran “ota sen verran kun syöt”? Samaa voidaan soveltaa sovelluskehityksessä. Kun koodaustyössä tarvitset jonkun paketin tiettyä toiminnallisuutta varten, netistä löytyy lukuisia erilaisia avoimen lähdekoodin paketteja, jotka voit helposti asentaa käyttöösi. Ennen asennusta mieti kuitenkin tarkkaan, minkä niistä otat käyttöösi.

Pohdit mahdollisesti ennen paketin asennusta projektiin, kuinka hyvin se on ylläpidetty, ja onko riski, että joudut vaihtamaan kyseisen paketin piakkoin. Samaa ajattelua kannattaa jatkaa pohtimalla, suositko paketteja, jotka tarjoavat kasan työkaluja, vaikka tässä projektissa tarvitset vain pientä osaa tarjotuista työkaluista vai ottaisitko ennemmin jonkun suppeamman paketin, joka tarjoaa vain yhden työkalun tämän kyseisen ongelman ratkaisemiseen. Voi yllättää, kuinka isoja kokoeroja paketeilla on. Paketin koko taas vaikuttaa suoraan, paljonko energiaa joudutaan käyttämään esimerkiksi siihen, että sovellus saadaan käyttäjän selaimeen näkyville. 

Sama pätee myös esimerkiksi CI/CD-putkissa ajettaviin kontteihin. Jokainen kerta vaatii energiaa, kun kontti ladataan suoritettavaksi integraatioputkessa. Mitä pienempi kontti, sen vähemmän energiaa kuluu sen siirtämiseen.

Hyödynnä välivarasto

Mitä jos sovelluksen ei tarvitsisi joka kerta hakea tarvitsemaansa tietoa kauimmasta mahdollisesta paikasta? Tässä toimii esimerkkinä ruokakauppa. Kun hyllystä loppuu leipä, sitä ei tarvitse hakea lisää leipomosta, vaan prosessi on optimoitu niin, että toimitus tulee kaupan varastoon, josta leipää täydennetään hyllyihin sitä mukaan, kun sitä myydään. Parhaimmassa tapauksessa isoilla toimijoilla on useampia eri välivarastoja eri tuotteille. Ohjelmistokehityksessä näitä välivarastoja aletaan miettiä yleensä siinä vaiheessa, kun sovelluksen suorituskykyyn tarvitaan parannuksia. Sen lisäksi, että välivarastointi parantaa suorituskykyä, se myös pienentää sovelluksen ilmastokuormaa vähentämällä tiedonhakuun tarvittavaa energiaa.

Yhdessä projektissa vastaani tuli taustajärjestelmä, jonka data päivittyi kerran vuorokaudessa. Joka kerta, kun sieltä haettiin dataa, joutui taustajärjestelmä ottamaan vastaan pyynnön, prosessoimaan mitä pyydetään, tekemään kutsun tietokantaan ja prosessoimaan datan haluttuun muotoon. Tässä tilanteessa oli hyvin selvää, että taustajärjestelmän eteen kannattaa toteuttaa välivarasto, jossa data elää vuorokauden kerrallaan. Taustajärjestelmästä haetaan ja prosessoidaan data kerran ja sen jälkeen samaa dataa hakiessa palautetaan välivarastoon tallennettu valmiiksi prosessoitu data. Näin minimoidaan kutsut taustajärjestelmään ja sen tekemä työ.

Todenna tulokset

Miten voidaan olla varmoja, että näistä tai muista toteutetuista parannuksista on hyötyä? Kuten kaikkien muidenkin parannusten todentamisessa, vastaus on: mittaamalla. Mitä halutaan mitata ja miten, riippuu aina kyseessä olevasta järjestelmästä. Tapoja on monia ja se, mitä vaikutuksia halutaan tarkastella riippuu siitä, mitä parannuksia tehdään. Jossain tapauksessa halutaan tarkastella selaimeen ladatun sivun kokoa, toisessa mitata käytetyn sähkön määrää, kun taas jossain tapauksessa analysoida käytettyjen pilviresurssien laajuutta. Mittaamalla parannusten tasoa voidaan havaita ja todentaa, mitkä asiat toimivat kyseisessä sovelluksessa.

Mitä tulevaisuudessa?

Haluan uskoa, että tulevaisuudessa pystymme rakentamaan sovelluksia, jotka pystyvät reagoimaan senhetkisen energiantuotannon hiili-intensiteettiin. Haluaisin nähdä, että tulevaisuudessa pilvipalveluntarjoajat toteuttaisivat palveluita, jotka kannustavat yrityksiä suorittamaan ne operaatiot öisin, jotka tarvitsevat raskasta laskentaa. Mahdollisesti tarjota jopa pilvipalveluita, jonne yritys voi määritellä tietyn aikaikkunan ja silloin suoritettavat operaatiot. Pilvipalveluntarjoajat voisivat optimoida näille määritellyille operaatioille parhaan ajankohdan suorittaa ne ottaen huomioon heidän datakeskuksen lokaation ja energiantuotannon hiili-intensiteetin. 

Haluan myös uskoa, että tulevaisuudessa näitä asioita toteutetaan niin meidän asiakasprojekteissamme kuin muissakin ohjelmistoprojekteissa entistä enemmän. Haluan olla itse suunnittelemassa, toteuttamassa ja kehittämässä tapoja todentaa vaikutuksia, mitä saamme aikaan. Uskon, että pienillä muutoksilla on iso vaikutus kokonaisuuteen, kun niitä tehdään jatkuvasti ja useassa paikassa – oli kyse sitten itse käyttäjille näkyvän sovelluksen optimoinnista (kuvat, fontit, pakkaaminen, suunnittelu) tai käyttäjältä piilossa olevista muutoksista (välimuistit, palvelinympäristöt, resurssitehokkuus). Parhaassa tapauksessa tästä hyötyy loppukäyttäjä, tekijät, yrityksen pankkitili ja tietysti maapallo.

 

Tutustu aiheeseen lisää: 

Green software foundation
Green software patterns

Lue GreenICT-sivuiltamme, miten voimme auttaa yritystänne pääsemään alkuun.