Servers? Ouderwets! Helemaal niet nodig met Serverless Architectuur

De nieuwe manier om (SaaS) Applicaties te hosten.

Joost

Geschreven door Joost Saanen op 24-8-2016
4 minuten leestijd

Webapplicaties draaien in een Serverless Infrastructuur. Je leest het goed: zonder server. In deze tijd een veelbesproken thema. Dat kan toch helemaal niet, hoor ik je denken. Toch wel. Ik zal het proberen uit te leggen. Niet getreurd, ook wanneer je niet zo technisch bent aangelegd, kun je gewoon door blijven lezen.

AWS Lambda

Ok, een klein beetje techniek dan. Het is handig wanneer je het concept snapt van AWS Lambda (Amazon Web Services Lambda). Ik richt me in deze post even op AWS Lambda, maar er zijn ook ander soorten technieken van hetzelfde principe. Lambda maakt het mogelijk om je code te uploaden in een AWS Infrastructuur. Nadat de code is geüpload kun je er een zogenaamde Lambda-functie van maken. AWS Lambda bekommert zich over de servers waar de functie uitgevoerd kan worden. Je hoeft je daar als gebruiker helemaal geen zorgen om te maken. De Lambda-functie wordt ‘getriggerd’ wanneer er iets gebeurt. Zo meteen hier meer over.

Met AWS Lambda kun je de Lambda-functie op een High Available infrastructuur uitvoeren. High Available betekent hier dat er nauwelijks — lees: nooit — sprake is van downtime. Maar er zijn meer voordelen. Naast dat je geen zorgen hoeft te maken over servers, monitoring en logging, wordt de omgeving naarmate gebruik automatisch op- of afgeschaald. Naast flexibiliteit is dit ook nog eens heel goedkoop. Je betaalt per request — wordt er weinig gebruik wordt gemaakt van je service, dan zijn de kosten ook nihil. Wanneer je gebruik maakt van een server is dit vaak anders. Je betaalt vaak per maand (of in het geval van Amazon EC2 per uur). En wanneer de server niet of nauwelijks wordt gebruikt blijven de kosten gelijk. Dit is een groot nadeel van traditionele maar ook hypervisor hosting. Bij containerized hosting is het nadeel overigens al wel minder. Ik schreef er eerder al eens een blog over.

De enige vereiste is dat de code geschreven is in Java, Node.js of Python. Dit zijn de talen die op dit moment worden ondersteund. Andere talen, zoals Ruby of Elixir, kunnen ook gebruikt worden, maar de code moet dan eerst verpakt worden als een executable. Vervolgens kunnen ze worden geüpload en uitgevoerd.

Een concreet voorbeeld

Ik zal het duidelijk proberen te maken met een voorbeeld: Laten we zeggen dat je een webapplicatie hebt waarbij een gebruiker zich kan registreren. De gebruiker kan bij het registeren een foto van zichzelf uploaden. Wat gebeurt er hier? De gegevens van de gebruikers dienen te worden opgeslagen in een database. Daarnaast is het nodig dat er een thumbnail wordt gemaakt van de foto — zodat deze ook als avatar gebruikt kan worden in de applicatie.

Je zou natuurlijk een server in kunnen regelen die deze processen uitvoert. In sommige gevallen een prima oplossing. Maar stel, je webapplicatie is een online ticketsysteem waarbij gebruikers kaartjes kunnen bestellen voor een populaire artiest. Je kunt je voorstelllen dat je op het ene moment meer registratie binnenkrijgt dan andere. Dat wil zeggen dat de server op het ene moment niets te doen heeft, en andere keren de verzoeken met moeite af kan handelen. Dan heb je misschien ook nog eens te maken met het feit dat er verschillende formaten of versies van de thumbnails gemaakt moeten worden. De references van de thumbnails moeten worden opgeslagen in een database. Oh ja, en de processen moeten ook nog eens asynchroon worden afgehandeld.

Wist je dat bovenstaande acties met een paar Lambda-functies afgehandeld kunnen worden? Dit kan door een functie te maken die het resizen van de images uitvoert en een andere voor de data (naam, adres, etc.) in een database op te slaan. Dit alles zonder gebruik te maken van een server. En zelfs wanneer er duizenden gebruikers tegelijk een registratie-formulier invullen, hoef je je niet druk te maken over overbelaste servers of processen die crashen.

Is het iets voor mijn applicatie?

Natuurlijk loont zich niet elk scenario voor een model als hierboven beschreven. Toch zijn er veel situaties waarbij een oplossing volledig kan rusten op een serverless architectuur — of in iedergeval voor een groot deel. Denk bijvoorbeeld ook aan API’s die sterk te maken hebben met piek en dal-belasting. Waarom zou je hier een dure server voor laten draaien? Overigens is het ook mogelijk dat zo’n API wordt gekoppeld aan een bestaande softwareoplossing of (maatwerk)applicatie.

Het is belangrijk om het concept van Serverless Architecture te begrijpen. Dan wordt ook zichtbaar in wat voor situaties het geschikt kan zijn en waar het je tijd en geld kan besparen. Daarnaast hoeven developers, devops én klanten zich geen zorgen te maken over over servers of het oplossen van problemen hieromtrent. Zij kunnen zich focussen op belangrijke zaken. Werkzaamheden waar ze goed in zijn.

Door kleine afgebakende componenten (die allemaal eigen verantwoordelijkheden hebben) aan elkaar te koppelen krijg je één groot werkend geheel of systeem. Dit wordt ook wel het concept van Micro Services genoemd. Je Lambda-functies zijn in deze context je micro-services.

In een vervolg post zal ik iets dieper in gaan op de techniek met een uitgewerkt praktisch voorbeeld.

Ben je geïnteresseerd geraakt of benieuwd of een serverless architectuur je kan helpen bij het oplossen van een probleem of het leveren van een dienst? Neem contact met ons op. Onze afdeling Managed Services kijkt graag met u naar de mogelijkheden.

Joost

Joost Saanen

Gepassioneerde all-rounder met brede interesses; van serverbeheer en cloudhosting tot (UI)design en (web)development. Hardloopt en schrijft het liefst tegelijk.