Google Cloud Functions

Cloud-tjänster som grundläggande byggblock för programutveckling, till exempel databaser och medddelandetjänster, börjar mogna och bli användbara. En viktig sådan som kommer nu är serverless, eller FaaS (Function As A Service).

I Google Cloud implementeras Function-tjänsterna i Javascript och körs på ett Node.js runtime. Vi kan programmera i Ecmascript 6 och då blir koden riktigt vettig och trevlig att jobba med även för mig med ett starkt typad programmeringsbakgrund. I AWS heter tjänsten Lambda.

Jag har nu deployat min första Google Cloud Function-tjänst till produktion och är på gång med nästa. Erfarenheterna hittils är goda.

empty data center

Tom datahall

Google Cloud Functions tillhandahåller en körmiljö för enkla fristående tjänster (typ små mikrotjänster) som exekverar programkod som svar på ett antal fördefinierade händelser i molnet. Exempel på såna händelser är

  • Inkommande HTTP-anrop
  • Händelse på en pub/sub tjänst
  • Skapad/deletad fil i en Cloud Storage Bucket

Det är inte stor skillnad på en Google Cloud Function och en Kubernetes-applikation skriven med Node.js, varken från ett utvecklar- eller driftsperspektiv, så länge man betraktar tjänsten som något som kör i en enda instans. Jag ser framför mig att man, åtminståne den närmaste tiden, utvecklar för bägge plattformar, man väljer att implementera en Function eller en Kubernetes-applikation, som bäst passar in på behoven.

En Google Cloud Function är mer begränsad i sin funktionalitet än en Node.js-applikation, i vilken man kan göra i princip vad som helst. Man måste designa för FaaS från start.

Nu när jag ska bygga vidare på Functions saknar jag direkt detaljer som att kunna trigga på tid, en cron-liknande funktion alltså. Vidare saknar jag inbyggd autenticering mot Google API-er, som i Google Apps, men det kommer förmodligen snart.

Den största fördelen med Functions är förmodligen att vi kan designa för att kunna skala upp kapacitet precis när den behövs, och det finns få gränser för hur parallellt vi kan gå. Att debiteringen följer detta och sker i upplösning om 100 millisekunder innebär att man kan designa för hisnande höga prestanda i topparna utan att det behöver kosta mycket.

Som det ser ut för dagen är det gratis upp till 2 miljoner anrop i månaden, vilket är ungefär så många sekunder det ryms i en månad. Därutöver kostar det cirka 4 kronor per miljon anrop.

Exempel på en graf hur och när en Function har invokerats:

gcf-invocations

Om man vill kunna starta tjänsten lokalt, till exempel för att debugga, så installerar man en lokal emulator:

 npm install -g @google-cloud/functions-emulator

I övrigt är allt samma gamla vanliga: Man lagrar programkoden i Github, entrypoint ser lite annorlunda ut jämfört med Node.js/Express, man deployar på samma sätt med ett kommando/script:

gcloud beta functions deploy myAppName --stage-bucket my-cloud-functions --trigger-http

Vi behöver fortfarande samma sorts deployment pipeline och lika mycket automatiska tester och av samma skäl som förr.

Miljökonfigurationen är underbart minimal. Node-versionen är hårdlödd i miljön och utgörs av den senaste LTS-releasen (nu 6.11.1). Man kan konfigurera max heap (default 256 MB) och timeout för exekvering (default 60s). Deploymentversion genereras av miljön, funktionen övervakas med avseende på invokeringar, exekveringstid, minnesanvändning, fel och man kan komma åt loggarna som vanligt.

Nedan ett exempel på hur exekveringstider vid anrop presenteras:
gcf-execution-time

Functions är här för att stanna.

IT Consultant at CAG Edge. Cloud and Continuous Delivery specialist, software developer and architect, Node.js, Java.

Publicerad i Uncategorized

Kategorier

WP to LinkedIn Auto Publish Powered By : XYZScripts.com