Kirjoittaja
Tuomas Hulkkonen

Gapps Tech Talk: Mikropalveluiden rakentaminen Google Cloud Platformia hyödyntäen

Istuimme viime viikolla alas Universen kehittäjän Perttu Ristimellan kanssa ja keskustelimme mikropalveluista modernissa ohjelmistokehityksessä. Perttu kehittää yhdessä muun tiimin kanssa Universe -nimistä digital workplace -ratkaisua, joka tarjotaan asiakkaille ympäri maailmaa SaaS palveluna.

Hei Perttu! Mitä kuuluu? Minkä parissa olet työskennellyt viime aikoina?

Perttu: Viime aikoina olen keskittynyt Universen monoliittisten osien pilkkomiseen – erityisesti kirjautumisen ja autentikaation osalta – luoden niistä ns. mikropalveluita. Tämän lisäksi olen päivittänyt web serveriä tarjoilemaan staattista sisältöä ja rakentanut API-gatewayta Google Cloud App Engine Flex -ympäristön päälle toimimaan porttina backendin mikropalveluille. Tähän liittyen myös muuta Google Cloud Platform (GCP) -ympäristöä on päivitetty tukemaan paremmin mikropalveluita.

Mitä hyötyjä mikropalvelut tarjoavat kehittäjän näkökulmasta?

Perttu: Selkeitä hyötyjä ovat ainakin eri moduulien muuttaminen; vähemmän kompleksisuutta, helpompi päivitettävyys, useiden deployment pipelinien käyttäminen, bugien korjaamisen nopeus sekä yleisesti lyhyempi lead-time. Pienempien kokonaisuuksien “lataaminen” kehittäjän omaan päänsisäiseen RAM-muistiin helpottaa myös työskentelyä.Tämän lisäksi arkkitehtuurisesti voidaan valita oikeita ratkaisuja kuhunkin tarpeeseen ja näitä osia voidaan skaalata tarpeen mukaan; eri osilla on eri tarve skaalautuvuudelle.

Mitä haasteita mikropalveluiden rakentaminen ja hyödyntäminen  asettaa?

Perttu: Palveluiden rajaamisessa täytyy olla tarkkana, sillä liian suuret palvelut tai hämärät vastuualueet tuottavat monia hankaluuksia. Datan replikointia ja synkronoimista palveluiden välillä voi olla tarpeen tehdä, mikä tuottaa uusia haasteita.

Miten Google Cloud Platform tukee mikropalveluiden rakentamista?

Perttu: Google Cloud Platformin App Enginen ollessa Platform-as-a-Service (PaaS) -alusta on helppo lähteä tutustumaan mikropalveluiden rakentamiseen, sillä App Engine tarjoaa siihen paljon valmiita työkaluja.. Oikein käytettynä tämä toimii erittäin hyvin mikropalveluiden toteuttamisessa, jonka lisäksi etuna ovat sen matalat kustannukset ja korkea skaalautuvuus.

Googlen Kubernetes Engine on helppo alusta pyörittää omia Docker-imageja. Googlen “no-ops” -mentaliteetti tekee käyttöönoton erittäin helpoksi, mutta jättäen kuitenkin paljon  varaa hienosäädölle. Kubernetes on päivittynyt viimeisten kuukausien aikana tiheään, ja Google Cloud Consoleen on tuotu paljon uusia integraatiota ja ominaisuuksia, mitkä olivat aiemmin nähtävillä vain Kuberneteksen hallintapaneelista.

Appengine Flex on hieman kalliimpi ratkaisu kuin Kubernetes Engine, sillä siinä ajetaan yhtä imagea per instanssi. Etuna on kuitenkin se, että Docker -imageiden käyttö on erittäin helppoa, jonka lisäksi PaaS-alusta tarjoaa sen mukanaan tuomat valmiit hyödyt, kuten automaattisen SSL-varmenteen, kuormantasauksen, automaattisen skaalautuvuuden ja helpot integraatiot muihin GCP palveluihin.

Googlen Cloud Functions tarjoaa helpon tavan rakentaa event -pohjaista arkkitehtuuria. Niiden avulla voidaan esim. reagoida Cloud Pub/Sub:n viesteihin ja tiedostojen tallennukseen Google Cloud Storageen, tai esimerkiksi Firebasen eventteihin. Tästä esimerkkinä vaikka kuvan analysointi ja metadatan päivittäminen kun se on ladattu Google Cloud Storageen. Kustannukset ovat täysin käyttöön perustuvia tarjoten ensimmäiset 2 miljoonaa invokaatiota ilmaiseksi,ja laskenta veloitetaan muistin perusteella 100ms intervalleilla.

Firebase tarjoaa helpon hostauksen staatisille tiedostoille, kuten React tai Angular -applikaatiolle.  LIsäksi se tarjoaa myös autentikaatio- ja käyttäjänhallintapalvelun, jossa on valittavana useita palveluntarjoaja. Mobiilikehittämiseen tarjolla on monia eri palveluita, kuten push-notifikaatiot, virheraportointi ja käyttäjä analytiikka. Mitä kieliä on tuettuna näissä ratkaisuissa?

Cloud Functions tukee toistaiseksi vain Javascriptiä. App Engine Standard tukee Java 8:aa, Pythonia ja Go:ta. Kubernetes Engine ja Google App Engine Flex tukevat käytännössä mitä tahansa.

Mitä asioita kannattaa huomioida mikropalveluiden rakentamisessa ja käyttöönotossa, erityisesti Google Cloud Platformissa?

Perttu: App Engine Standard kannattaa pitää melkoa ohuena; lyhyt start-up aika helpottaa paljon. Toki PaaS-alustan suhteen on hyvä pitää mielessä “PaaS lock-in” tietyiltä osin.

Cloud Functions:n HTTP-invokaatioilla ei ole olemassa palomuurisääntöjä, joten niitä voi kutsua mistä vain. Event-based -arkkitehtuuriin Cloud Functions tarjoaa kuitenkin paljon mahdollisuuksia esimerkiksi yhdessä Cloud Pub/Sub:n kanssa

Kubernetes ja Kubernetes Engine olisi oma valintani, jos lähtisin rakentamaan mikropalvelu -arkkitehtuuria tyhjästä. Se tarjoaa eniten vapauksia ja vähiten vendor-lockia. Kubernetes voi hyödyntää laajasti muita Google Cloud Platformin ratkaisuja sekä tallentamiseen (Datastore, Spanner, Firebase, Cloud SQL, Redis klusterissa) että muihin osa-alueisiin liittyen. Skaalautuvuus pitää konfiguroida itse käyttäen Kubernetisin työkaluja.

Appengine Flex olisi hyvä alusta web frontendin ajamiseen muun muassa siksi, että tarjolla ovat automaattiset SSL sertifikaatit ja valmis load balancing Googlelta.

 

Lue lisää Google Cloud Platformista ja sen mahdollisuuksista: https://cloud.google.com/appengine/docs/standard/python/microservices-on-app-engine

Gapps toimii Universen virallisena partnerina. Lue lisää Universesta:
www.getuniverse.com

Tuomas Hulkkonen
Technical Director

Lue lisää samanlaisia artikkeleita

Haluatko uusimmat kirjoitukset uunituoreina?

Ota yhteyttä