Serverless architecture

Veel web ontwikkelaars hebben dit al eens meegemaakt: dat ene project dat al jaren probleemloos in productie draait komt onverwachts groots in de media en binnen no-time raakt de onderliggende infrastructuur overbelast, met downtime en rokende servers tot gevolg. Dit is vanzelfsprekend te voorkomen met maatregelen als intensieve monitoring, virtualisatie en autoscaling, maar kan al snel een erg kostbare aangelegenheid worden. Het kan ook makkelijker en goedkoper, namelijk zónder servers!

#Postcode API

Afgelopen maand lanceerden wij de nieuwe versie van de Postcode API. De software en infrastructuur zijn van de grond af aan opnieuw ontworpen en ontwikkeld op basis van moderne technologie. Bij de Postcode API hadden we in het verleden vaak hinder van piekgedrag, wat impact kon hebben op de performance en beschikbaarheid van de dienst. Ontwikkelaars bestookten regelmatig de server omdat ze bijvoorbeeld een adressenbestand van tienduizenden records met een automatisch script wilden valideren. Waarschijnlijk zonder zich van enig kwaad bewust te zijn. Dit is dan ook het risico van het aanbieden van een dergelijke dienst: je bent afhankelijk van de wijze waarop derden ervan gebruik maken.

In het verleden zouden we op een ontwikkelplatform en framework naar keuze een web applicatie ontwikkelen en deze hosten op één of meerdere web- en databaseservers, al dan niet virtueel. Het inrichten en beheren van een dergelijke infrastructuur, met hoge eisen op het vlak van performance en beschikbaarheid, omvat meer dan men vaak denkt. Er is diepgaande kennis en ervaring vereist om deze klus op de juiste wijze te kunnen klaren. Er kan immers veel mis gaan en web ontwikkelaars bezitten over het algemeen niet de benodigde expertise op het gebied van systeembeheer.

Traditional hosting

Met de cloud-revolutie van de afgelopen jaren zijn er interessante nieuwe mogelijkheden ontstaan die het leven van een ontwikkelaar een stuk makkelijker kunnen maken. Amazon is met haar Amazon Web Services (AWS) één van de pioniers op dit gebied en biedt talloze diensten aan die het mogelijk maken een applicatie op een enorm schaalbare en onderhoudsloze infrastructuur te hosten.

#AWS Lambda & API Gateway

Met de lancering van AWS Lambda (maar ook non-AWS diensten als Parse en Heroku) is er een nieuwe revolutie geboren: de serverless architecture. Lambda is in staat stukjes code (Java, Javascript of Python) uit te voeren in micro-containers en maakt daarmee applicatieservers overbodig. Deze stukjes code kunnen getriggerd worden door events, zoals API calls, database mutaties of IoT events.

Een relatief nieuwe service is AWS API Gateway. API gateway maakt het mogelijk een RESTful API te definiëren en de URLs te routeren als events naar Lambda. API gateway fungeert hierbij als proxy/webserver, waardoor men geen omkijken meer heeft naar zaken als load balancing en SSL. Ondanks dat API gateway nog erg nieuw is en nog de nodige tekortkomingen kent, is het al zeer bruikbaar in combinatie met Lambda.

Hieronder zie je een voorbeeld van hoe een serverless architecture eruit zou kunnen zien.

AWS serverless architecture

Het combineren van beide diensten, in combinatie met andere AWS services, biedt een hoop voordelen:

#Onderhoud

In het verleden waren er altijd (virtuele) applicatie-servers nodig om een applicatie te kunnen hosten. Deze servers moeten geïnstalleerd, geconfigureerd en gemanaged worden en kostbare SLA’s zorgen ervoor dat software up-to-date blijft, security kwetsbaarheden direct gedicht worden en de beschikbaarheid gewaarborgd blijft.

Met de serverless architecture is er geen sprake meer van applicatie-servers. De bijbehorende risico’s als vollopende resources (CPU, memory, disks) en crashende software behoren dus tot de verleden tijd. AWS draagt volledig zorg voor het faciliteren en managen van de onderliggende infrastructuur, zodat de ontwikkelaar zich enkel hoeft te bekommeren om de applicatie-code. Kwetsbaarheden als SSL exploits en DDOS attacks worden door AWS 24/7 gesignaleerd en platform-breed aangepakt.

#Schaalbaar

Voorheen was er een autoscaling configuratie benodigd om piekbelasting op te kunnen vangen. Bij Lambda maakt het niet uit of er 1 event per seconde plaatsvindt of 1000 events, het enige dat er verandert is de factuur. Men hoeft zich geen zorgen te maken of het blijft werken, Lambda zorgt er zelf voor dat alle resources worden aangesproken om de betreffende hoeveelheid events af te kunnen handelen. Kanttekening is wel dat er voldoende capaciteit toegewezen (provisioned) moet worden, maar dit is een simpele handeling en eenvoudig te automatiseren.

#Voordelig

Bij traditionele hosting was er altijd een bepaalde capaciteit actief, ook in de daluren. Dit brengt vanzelfsprekend de nodige kosten met zich mee. Bij een serverless architecture betaal je alleen wat je verbruikt. Zijn er geen calls gedurende een aantal uur? Dan ook geen kosten. Dit maakt dat deze architectuur vele malen goedkoper is.

#Toepassing

Is deze architectuur de oplossing voor alle (web) applicaties? Het antwoord is: nee.

Hetgeen hierboven is beschreven is voornamelijk bedoeld voor relatief simpele acties, zoals API calls, data processing en workflow management. Wel kan het een interessante aanvulling zijn op een bestaande infrastructuur. Neem bijvoorbeeld een voting platform. Het laden van de data voor de stemwidgets en het afhandelen van de votes zijn typische voorbeelden van acties die je serverless kan maken, waarbij je bestaande infrastructuur enorm ontlast kan worden.

#Conclusie

De serverless architecture is een ontwikkeling die een hoop complexe en kostbare taken uit handen neemt. De komende jaren zullen er dan ook ongetwijfeld veel alternatieven gelanceerd worden, iets wat ten goede zal komen aan de adoptie en volwassenheid van deze architectuur.