Monoliiteista mikropalveluihin

/

Monoliiteista mikropalveluihin - Solenovo

Solenovon lähes 25-vuotiseen historiaan mahtuu monta ja monenlaista tuotetta. Uusia projekteja on lähes poikkeuksetta lähdetty toteuttamaan myös uudella teknologialla ja täten ylläpidettävä teknologia-stack on ollut kirjava (vanha XML/XSLT-pohjainen in-house framework SoleW, Java, Angular…).

Useiden teknologioiden lisäksi käytössä oli myös 2 tai 3 erilaista versionhallintajärjestelmää. Tämä teki käytännössä mahdottomaksi tiimien välisen liikehdinnän ja kuormantasauksen, yhtenevät CI/CD pipelinet ja automaatiot.

Teknologiauudistus aloitettiin vuonna 2018 viemällä kaikki lähdekoodit yhteiselle Git-versionhallinta-alustalle, sekä selvittämällä mahdolliset sovelluskehitysteknologiat seuraaville vuosille. Tässä vaiheessa päätöstä ohjasi yksi selkeä idea: pois monoliiteista ja kohti mikropalveluja. Mikropalvelut mahdollistavat toimintojen yhtenäistämisen, sillä ne voidaan lähtökohtaisesti suunnitella toimimaan usean eri tuotteen kanssa.

Mikropalveluiden ansiosta jokaiseen tuotteeseen ei esimerkiksi tarvitse rakentaa omaa moduulia sähköpostin lähetystä varten, vaan voidaan kehittää yksi yhteinen palvelu, joka voidaan tarvittaessa myös korvata tulevaisuudessa kokonaan uudella moduulilla. Koska mikropalvelut kehitetään omina kokonaisuuksinaan, mahdollistaa se tarvittaessa myös eri ohjelmointikielien ja teknologioiden käytön.

Teknologiavalinnat

Seuraavana vuorossa oli valita teknologiat, joilla tultaisiin tekemään ensimmäiset front-end ja back-end-toteutukset ja joilla muodostettaisiin uuden teknologiastackin pohja. Koska Solenovon tuotteet ovat web-pohjaisia, front-end teknologian valinnassa vertailtiin suosittuja JavaScript-frameworkeja, kuten Angular, React ja Vue.js. Nopeasti näistä voittajaksi nousi React, joka tuntui olevan sekä suosittu, että vakaimmalla pohjalla.

Back-end teknologian valinta vaati kuitenkin tarkempaa tutkimista. Vaihtoehtoina oli kaksi hyvin erilaista mahdollisuutta, Java Spring tai Node.js pohjainen LoopBack. Yrityksen sisältä löytyi valmiiksi Java-osaajia sekä Spring-frameworkillä tehty tuote, joten se olisi ollut ainakin lyhyellä aikavälillä luonnollinen valinta. LoopBack ja Node.js -kokemus rajoittui meillä lähinnä yksittäisten kehittäjien harrasteprojekteihin, eli kokemus oli selvästi Java Spring -valinnan puolella.

Aiemmasta kokemuksesta huolimatta back-end teknologiaksi valikoitui lopulta LoopBack. Painavin syy valinnalle oli synergia, joka saavutetaan käyttämällä samaa ohjelmointikieltä front-end ja back-end toteutuksissa. Näin kehittäjä voi saumattomasti siirtyä front-end ja back-end-kehityksen välillä.

Ensiaskeleet

Vuoden 2018 lopussa järjestettiin ensimmäiset koulutukset valituille teknologioille. Kahden viikon intensiivijaksossa tutustuttiin esimerkiksi React-komponenttien tekoon. 2018 aikana toteutettiin myös ensimmäiset React-käyttöliittymät SoleStudenta-projektiin. 2019 aikana Solenovolla perustettiin R&D-kehitystiimi, joka ryhtyi rakentamaan Solenovon yhteistä käyttöliittymäkomponenttikirjastoa. Komponenttikirjaston tarkoituksena on yhtenäistää eri tuotteiden kehitystä, käyttöliittymäsuunnittelua ja ulkoasua.

Uusi alku

Ensimmäiseksi uudistettavaksi tuotteeksi valikoitui SoleCris. Projekti starttasi vuoden 2020 alussa käyttöliittymäpohjan teolla. Myöhemmin keväällä syntyivät ensimmäiset mikropalvelut ja tämän blogin kirjoitushetkellä mikropalveluita on Cris:in käytössä jo kymmenisen kappaletta. Mikropalveluille ja käyttöliittymille on tehty pohjaprojektit, joista voidaan jalostaa omia projekteja. Näin uuden mikropalvelun rakentaminen on erittäin nopeaa.

Nyt Solenovon hullut tiedemiehet voivat suunnitella uuden mikropalvelun ja se on mahdollisesti valmiina käyttöön jo seuraavan sprintin lopussa. Mikropalvelut suunnitellaan tarvekohtaisesti yhteistyössä tuoteomistajien kanssa ja eri tuotteiden vaatimukset otetaan huomioon, kun mikropalvelu herää eloon kehittäjän pöydällä. 2021 tuo tullessaan mikropalvelujen tuotantoon viennin, sekä toivottavasti seuraavan tuotteen uudistamisen toimivaksi osoitetulla stackilla.