Aki Naakka
Kokenut data-arkkitehti, jolla on laaja-alainen osaaminen sekä pilviympäristöissä että perinteisessä on-premise-infrasktruktuureissa.
Tavanomainen liiketoiminnan tunnuslukujen raportoiminen saattaa kerryttää organisaation pilvipalveluihin pitkään piilossa pysyviä piilovirheitä ja turhia kustannuksia. Tässä blogissa kerron, mistä piilovirheet tavanomaisesti syntyvät ja miten kustannuksia on mahdollista optimoida Databricks- ja Microsoft Fabric-ympäristössä.
Tyypillisesti pilvipalveluiden piilovirheet ja -kustannukset alkavat kertyä jo suunnitteluvaiheesta, tai paremminkin suunnittelun puutteesta. Ei esimerkiksi ole lainkaan harvinaista, että dataa ajetaan konesaleihin automaattiasetuksilla, järjestelmiä ei kytketä pois päältä tai ajotehtäviä ei lopeteta oikein. Konesalit saattavat jauhaa säännöllisesti jokaisena viikonloppuna täysin hukkaan heitettyä dataa kenenkään tietämättä. Tämän ennaltaehkäiseminen ei vaadi puolen vuoden räätälöintiprojektia. Usein muutama tunti enemmän suunnitteluaikaa ja oikeiden kysymysten kysyminen estäisivät ongelmien muodostumisen. Kokonaisuuden suunnitteluun investoitava aika tuottaa pitkällä aikavälillä merkittäviä säästöjä. Kustannusoptimoidun datatekemisen perustukset rakentuvat pilvinatiivin tietovarastoinnin varaan. Kustannusten näkökulmasta parhaimmat ratkaisut voidaan jakaa kahteen kokonaisuuteen: datan varastointiin ja pilvilaskennan kapasiteetin käytön optimoimiseen.
Liiketoiminnan tunnuslukujen raportointi on usein ensimmäinen tiedolla johtamisen työkalu, josta pilviteknologian ja datan hyötyjä aletaan ensimmäisenä etsiä. Tyypillisesti ratkaisua kokeillaan ensin osassa tai vain yhdessä liiketoimintayksikössä. Kokeilusta syntyy uusia johtamisen ja tuotannonohjauksen työkaluja, innostusta ja halua laajentaa ratkaisu laajemmin organisaation eri yksiköihin. Kun organisaation datatekeminen alkaa laajentua, alkaa konepellin alla syntyä ratkaisuja, jotka eivät huomioi eri yksiköiden tekemistä. Piilokustannuksia alkaa kertyä, jos kukin liiketoimintayksikkö alkaa laajentaa omaa dataputkistoaan omista lähtökohdistaan, käsittelee dataa omista lähtökohdistaan, eikä huomioi esimerkiksi datan yhteiskäytön mahdollisuuksia. Tällöin dataa saatetaan ajaa laskentaan tuhansia tai kymmeniä tuhansia rivejä useita kertoja vuorokaudessa. Tuloksena on saatu samat asiat, jotka olisi saatu ajamalla datasetti kertaalleen. Tästä syntyvät ajan myötä lineaarisesti kasvavat ja pitkään piilossa pysyvät kustannukset. Lineaarisen kasvukäyrän sijaan tavoitteena tulisi olla logaritminen kustannuskehitys: mitä enemmän dataa ja laskentaa, sitä vähemmän kustannuksia suhteessa datan määrään ja tuloksiin.
Databricksiin tai Microsoft Fabriciin integroitava Delta Lake tarjoaa kokonaisvaltaisen lähestymistavan kustannusten optimointiin koko datan elinkaaren ajan. Kyseessä on eräänlainen datan välivarasto, joka toimii olemassa olevan raakadataa tallentavan varaston päällä. Usein pelkästään Delta Laken käyttöönotto ratkaisee valtaosan datan käsittelyn kustannusongelmista. Parhaimmillaan ratkaisu on tuottanut jopa 80 prosentin säästöt pilvikustannuksiin.
Databricks ja Microsoft Fabric mahdollistavat pilvilaskentakapasiteetin optimoinnin sekä räätälöityjen laskentatehtävien määrittelyn ja käsittelyn kustannustehokkaasti. Tehtäväklusterit määritellään rajattujen töiden suorittamista varten siten, että ne käyttävät vain tehtävän suorittamiseen tarvittavan laskentakapasiteetin. Työt voidaan ajoittaa suoritettaviksi tiettyinä aikoina, esimerkiksi silloin, kun laskentakapasiteetin hinnat ovat ruuhka-aikoja halvempia. Tehtävä voidaan ajastaa Microsoftin tarjoamille Spot-tunneille, jolloin yhtiö myy konesaliensa ylijäämäkapasiteettia alennuksella. Databricks esimerkiksi automatisoi klustereiden hallinnan käyttöönotosta skaalaamiseen ja lopettamiseen. Tämä vähentää käyttäjille aiheutuvia toimintakustannuksia ja tehostaa kapasiteetin käyttöä merkittävästi.
Tehtäväklusteri määritellään koon, tyypin (esim. CPU- tai GPU-pohjainen) ja muiden asetusten, kuten automaattisen skaalautumisen mukaisesti loppukäyttäjän tarpeiden mukaisesti. Databricksissa tehtävän käsite viittaa laskentatehtävään tai tehtäväsarjaan, kuten tietojenkäsittelyyn, analysointiin tai koneoppimismallien koulutukseen. Työ määritellään yhdellä tai useammalla tehtävällä, jotka voivat olla Notebook-tehtäviä, Spark jar -tehtäviä, Python-tehtäviä jne. Jokainen tehtävä määrittää suoritettavan koodin ja sen vaatimat parametrit.
Siinä missä tehtäväklusterit on tarkoitettu vain ajastetuille ajoille, jaetuissa klustereissa on mahdollista tehdä data-ajoja yhtä aikaa kehitystyön kanssa.
Tyypillisesti kustannusongelmia alkaa syntyä, kun jokaiselle kehittäjälle varataan oma klusteri jaettujen klustereiden sijaan. Kustannuksia saattaa kerryttää 10–20 klusteria, kun kaksi riittäisi.
Jaetut klusterit nopeuttavat datan käsittelyä konesaleissa. Ne mahdollistavat muutosten tekemisen ilman, että konesalissa laskentaa tekevä kone ehtii sammua. Kun koneen ylösajo vie muutaman minuutin, optimoimattomat kehityksen menetelmät alkavat kerryttää piilokustannuksia, joista ajan myötä syntyy merkittäviä kuluja. Esimerkiksi Databricksissä kustannukset lasketaan sekunnin tarkkuudella, ja tässäkin tapauksessa pienistä puroista kertyy lopulta vuolas kustannusten virta, mikäli kehitystyön käytännöt eivät ole kustannusoptimoituja ja yhteisesti sovittuja.
Kustannusten optimointi on mahdollista monin eri tavoin. Meille tuttuja työkaluja tämän saavuttamiseen ovat muun muassa koodin optimointi, yksikköjen varaus, suora orkestrointi Databriksillä, Databricks Photon. Lisää vaihtoehtoja löytyy Microsoftin sivuilta ja Fabricista sisäänrakennettuina ominaisuuksina.
Pilvipalveluiden perusidea on mahdollistaa tiedon jakaminen keskitetysti laajalle joukolle käyttäjiä. Liian usein tämä peruslähtökohta unohtuu.
Lopulta kyse on ihmisistä ja organisaation kyvykkyyksistä. Kustannusyllätysten taustalla on usein samankaltaisia piirteitä, jotka kertovat toisaalta innostuksesta laajentaa datakehitystä organisaatiossa, mutta vielä kehittymässä olevasta datakulttuurista. Datakehitykseen liittyvää päätöksentekoa ajaa liiketoimintatavoitteet. Tämä on oikea lähestymistapa, mutta usein päätöksenteon rakenteet eivät huomioi riittävästi sitä, mitä datakehityksen konepellin alla tapahtuu ja miksi.
Datakehitystä jäykistää, usein turhaan, esimerkiksi datan käyttöoikeuksiin liittyvät kysymykset. On olennaista kysyä, mitä tuloksia kukin liiketoimintayksikkö tavoittelee ja mitkä ovat datakehityksen erityistarpeet. Kustannustehokkuuden kannalta olennaista on kysyä, minkälaista yhteistä dataa eri liiketoimintayksiköt kykenevät hyödyntämään. Pilvilaskennan kustannustehokkuus vaatii suunnittelussa selkeitä omistajuuden ja datan hallinnoimisen käytänteitä sekä IT:n ja organisaation eri liiketoimintayksiköiden sujuvaa yhteistyötä.
Datakehityksen ja sovellusten tulee aina olla liiketoimintalähtöisiä. Samaan aikaan se vaatii liiketoimintapäättäjältä kokonaisuuden hahmottamista ja riittävästi malttia, jotta tuloksia saadaan aikaiseksi kustannustehokkaasti. Datakulttuurin rakentaminen on vaiheittain etenevä kehitysmatka, jossa alkuvaiheen vauhdinjako ratkaisee menestyksen. Säästöjen hakeminen väärässä kohdassa datakehitysmatkaa saattaa olla lopulta kallis kiertotieksi osoittautunut oikotie.
Kokenut data-arkkitehti, jolla on laaja-alainen osaaminen sekä pilviympäristöissä että perinteisessä on-premise-infrasktruktuureissa.