modulaarista järjestelmäkehitystä

Ennen graafitietokantoihin syventymistä ajattelin kirjoittaa hieman ajatuksia modulaarisuudesta. Kun ryhtyy rakentamaan prototyyppijärjestelmää, varsinkin jos sitä tekee yksin, ei kannata tuhlata aikaa epäolennaiseen vaan keskittyä tärkeimpiin uusiin ideoihin. Toisaalta järjestelmät ovat lähtökohtaisesti laajoja ja sisältävät monia osasia, joten niiden rakentaminen on työlästä.

Erityisen työlästä järjestelmien rakentamisesta tulee, jos haluaa rakentaa kaiken itse. Myyttinen ohjelmistokehityksen sankaritarina on sellainen, jossa kokeilujen ja oppimisen myötä kaikki valmiit ratkaisut todetaan jollakin lailla vajavaisiksi ja päädytään lopulta tekemään kaikki alusta saakka uusiksi itse. Nämä ajat alkavat vähitellen olla ohitse. Suuntaus on nykyään sellainen, että vain ’se oleellinen’ oma juttu tehdään itse, ja loput kootaan valmiista palasista. Syynä muuttuneeseen tilanteeseen on toisaalta se, että modulaarisuus on parantunut ja kirjastot ovat kehittyneet, toisaalta laitteistosta on tullut riittävän tehokasta jotta kaikesta ei tarvitse puristaa aivan viimeisiä tehoja irti. Ajattelutavatkin ovat muuttuneet: siedetään paremmin sitä, että aivan kaikki yksityiskohdat eivät ole oman mielen mukaisia.

Omat verkkosivuni ovat hyvä esimerkki modulaarisesta kehittämisestä. En halunnut käyttää kovin paljon aikaa itse alustan rakentamiseen, koska se ei ole liiketoimintani ytimessä. Verkkosivujen tarkoitus on lähinnä toimia välineenä markkinoinnissa, välittää tietoa ja tarjota alusta blogille, joten oleellista on sisällöntuotanto. Tarvitsen palvelimia eri tarkoituksiin, joten pelkkä verkkosivun ylläpitopalvelu ei riittänyt, mutta en missään tapauksessa halunnut myöskään käyttää paljon aikaa laitteiston kanssa.

Kuten sarjan edellisessä osassa kerroin, hankin yritykselleni Nebulalta pilvipalvelimet. Ne ovat konesalissa olevia virtuaalipalvelimia, joita voi ottaa käyttöön ja poistaa käytöstä tarpeen mukaan. OpenStack tarjoaa helppokäyttöisen rajapinnan, jonka kautta palvelimia voi pystyttää ja hallita verkkoselaimessa. SSH-salausavaimilla hallinnasta saa turvallista, ja virtuaalipalvelimet ovat valmiiksi konfiguroituja, eristettyjä yksiköitä jotka tekevät vain niille määriteltyä tehtävää. Ympäristö voidaan rajata tarkasti, jolloin se on hallittavissa myös tietoturvan kannalta, ja resursseja ei kulu ylimääräiseen.

Suuria data- ja käyttäjämääriä ei voi hallita yksittäisillä koneilla. Virtuaalikoneista saa helposti rakennettua myös useamman palvelimen klustereita, ja kuorman jakamiseen klusteriin kuuluvien palvelimien välillä on valmiita ratkaisuja. Esimerkiksi Apachen Sparkilla pystyy tekemään hakuja suuresta datajoukosta siten, että useampi kone työstää hakutuloksia tahoillaan ja lopuksi tulokset yhdistetään. Neo4j-graafitietokantakin tukee tietokannan hajauttamista usealle palvelimelle. Neo4j:n ja Sparkin yhdistämiseen on valmiita ratkaisuja.

Pilvipalvelimet tekevät laitteistosta modulaarista, laajennettavaa ja hallittavaa. Docker tekee saman ohjelmistoille. Docker-säiliöt, joita voi ajatella ikään kuin ’rahtikontteina’, ovat periaatteessa hyvin kevyitä virtuaalikoneita, joissa kussakin on tarkoitus pyörittää yhtä rajattua palvelua. Samalla palvelimella, esimerkiksi laskentakeskuksen uumenissa sijaitsevalla virtuaalipalvelimella, voi olla useampi Docker-säiliö pyörimässä yhtä aikaa, kussakin niistä jokin erillinen järjestelmän osa, ja nämä osat voivat kommunikoida keskenään. Kunkin säiliön tehtävät ja rajapinnat on tarkkaan määritelty.

Esimerkiksi omalla verkkopalvelimellani on yhdessä Dockerissa MySQL-tietokanta ja toisessa WordPress-julkaisualusta. Docker Compose -työkalun avulla voin määritellä tämän kokonaisuuden yhdessä tiedostossa ja käynnistää sen yhdellä komennolla. Tietokannan data ja julkaisujärjestelmän käyttämät tiedostot voivat olla erillisessä tallennusyksikössä, jonka voi irrottaa pilvipalvelimesta ja yhdistää toiseen. Pystyn muutamassa minuutissa pystyttämään toiselle virtuaalipalvelimelle identtisen ympäristön OpenStackin ja Dockerin avulla, yhdistämään tallennusyksikön tai siitä tehdyn varmuuskopion, ja liittämään verkko-osoitteen uuteen palvelimeen. Käyttämällä API-rajapintoja pystyisin periaatteessa automatisoimaan nämä toimenpiteet komentojonoksi, jonka voin suorittaa omalla läppärilläni. Samoin voisin tehdä komentojonoja, joilla saan kasvatettua palvelimen resursseja kuorman kasvaessa ja pienennettyä niitä kysynnän laantuessa.

Modulaarisuusajattelu ulottuu lopulta myös yksittäisiin ohjelmistoihin. WordPress oli helppo valinta julkaisualustaksi sen takia, että se on hyvin modulaarinen ja siihen löytyy paljon valmiita lisäosia. Tämän takia itse perusjärjestelmä voidaan pitää yksinkertaisena ja tarjota ilmaiseksi. Maksullisilla lisäosilla saa käyttöön edistyneitä ominaisuuksia. Yrityskäyttäjälle oli hyvin helppo ja nopea ratkaisu ottaa käyttöön WordPressin peruspaketti virtuaalipalvelimen Docker-säiliön sisällä, asentaa maksullinen ja helposti muokattava ulkoasuteema, sekä ottaa käyttöön automaattinen roskapostin torjunta, hakukoneoptimointi ja varmuuskopiointi ostamalla sopivat lisäosat. Ulkoasuohjeet ja grafiikat tilasin asiantuntevalta graafikolta. Sivuston pystytykseen ja säätämiseen meni vain hyvin vähän aikaa, ja pystyin keskittymään varsinaiseen sisällön tuottamiseen, kuten halusinkin. Sivuston kaatuessa saan automaattisen hälytyksen, ja pääsen ssh-yhteyden kautta heti tutkimaan ja korjaamaan tilanteen.

Oman järjestelmäni kehittämisessä haluan noudattaa kuvatun kaltaista modulaarista ajattelua. Toisaalta haluan tehdä järjestelmästäni modulaarisen, jotta sen voi helposti ottaa käyttöön ja yhdistää muihin järjestelmiin. Toisaalta haluan käyttää sen kehittämisessä valmiita palasia, jotta pystyn omistamaan mahdollisimman suuren osan ajasta varsinaisten ydinosasten kehittämiseen.

Seuraavaksi lopulta graafitietokantoja ja varsinaista ydinasiaa.


Leave a Reply

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *