Mielenkiintoisia ajatuksia Serverless / FaaS -arkkitehtuurin tulevaisuudesta. Ytimessä on kysymys siitä, ettei esimerkiksi Amazonin Lambda-funktiota ajettaessa tarvitsisi maksaa siitäkin ajasta, jolloin funktio ei varsinaisesti tee mitään, vaan odottelee vain vastausta I/O-pyyntöihin kuten tietokantahakuihin. Lambda-funktioiden ajoaikahan on yleensä muutamia satoja millisekunteja, ja se kuluu lähes kokonaan tällaiseen odotteluun.

AWS:n Step Functions on jo iso askel tähän suuntaan. Sovelluksen rakenne voidaan suunnitella vuokaaviona, joka yhdistelee toisiinsa erilaisia komponentteja. Yhden komponentin tuloste on seuraavan syöte ja niin edelleen, kunnes päästään maaliin ja palautetaan lopputulos käyttäjälle. Vuokaaviomallin avulla päästään siihen, ettei kaikkea käsittelyä tarvitse tehdä kerralla yhdessä isossa Lambda-funktiossa.

Tällä hetkellä Step Functionsilla voi yhdistellä toisiinsa vain Lambda-funktioita eli omaa ohjelmakoodia. Mutta ei ole kaukaa haettua, etteikö se osaisi kutsua myös AWS:n pilvipalveluiden rajapintoja. Silloin suuren osan omasta ohjelmakoodista voisi korvata näillä vuokaavioilla ja sopivilla JSON-muunnoksilla. Vuokaaviossa voisi esimerkiksi lukea, että pitää ensin hakea kirjautuneen käyttäjän tiedot Cloud Directorysta, sitten tehdä niiden perusteella sopiva tietokantahaku DynamoDB:hen, sekä lopuksi käsitellä haun tulos Lambdalla.

Ohjelmakoodin korvaaminen vuokaavioilla voi tuntua epäkäytännölliseltä ajatukselta, mutta raha puhuu tässäkin asiassa. Mitä vähemmän koodia, sitä vähemmän bugeja ja ylläpitämistä. Ja sitä edullisemmaksi sovelluksen ajaminen tulee, koska pilviympäristön ei tarvitse suorittaa kustomoitua ohjelmakoodia vaan vakioituja toimintoja.

Itse heitin jo taannoin jollekin Amazonin Lambda-tiimiläiselle idean, että AWS:ssä pitäisi olla geneerinen I/O-tilakone palveluna. Palvelulle annettaisiin avoin I/O-pyyntö, kuten vaikkapa DynamoDB-tietokantahaku tai API-kutsu jonkin kolmannen osapuolen SaaS-palveluun, ja pyynnön valmistumista odotellessa ei tarvitsisi pitää Lambda-funktion resursseja varattuina. En tiedä toteutuuko tämä idea koskaan ihan tällaisena, mutta oli mielenkiintoista huomata, että linkitetyn artikkelin kirjoittajalla on samankaltaisia ajatuksia.

https://medium.com/@ben11kehoe/the-need-for-asynchronous-rpc-architecture-in-serverless-systems-ff168f1c8785