Belangrijkste verschillen tussen serverless en containers
De tabel hieronder laat zien hoe serverless en containers zich tot elkaar verhouden:
Kenmerk |
Serverless |
Containers |
Beheerlast |
Minimaal |
Gemiddeld |
Schaalbaarheid |
Automatisch schalen |
Handmatig of automatisch schalen |
Cold start |
Kan cold starts hebben |
Snellere opstarttijd |
Gebruik van resources |
Geoptimaliseerd voor individuele function calls |
Afhankelijk van grootte van container |
Prijsmodel |
Betalen per gebruik |
Betalen voor gereserveerde resources |
Flexibiliteit |
Beperkte controle over runtime omgeving |
Meer controle over runtime omgeving |
Een ander belangrijk punt is dat serverless functions draaien op gedeelde Azure infrastructuur. Die is veilig, maar in sommige sectoren voldoet zo’n gedeelde omgeving niet aan de compliance-eisen.
Overeenkomsten tussen Serverless en Containers
Serverless en containers maken het allebei makkelijker om apps te bouwen met een microservices architectuur.
Beide abstracten de onderliggende infrastructuur weg. Je hoeft als developer dus niet bezig te zijn met servers, alleen met code. Ze zijn ook allebei goed schaalbaar. Bij serverless gaat het automatisch op basis van events, en bij containers kun je met Kubernetes container instances automatisch schalen op basis van vraag.
Daarnaast passen zowel serverless als container-gebaseerde apps goed binnen DevOps. Ze ondersteunen CI/CD pipelines voor continue integratie en deployment.
Welke moet je kiezen?
De keuze tussen serverless en containers is belangrijk als je je applicatie wilt moderniseren. Dus: welk model past het best bij jou?
- Je kunt volledig serverless gaan waarbij al je code draait als kleine Azure Functions die reageren op events, in combinatie met PaaS services voor opslag, messaging, etc.
- Of je gaat 100% containerised: waarbij je een Kubernetes cluster draait en al je microservices gecontainerised zijn.
Je kunt zelfs verder gaan en ook je databases en message queues in containers draaien. Dat maakt je hele platform veel makkelijker te verplaatsen naar andere clouds.
Met andere woorden: je kunt je microservice app eenvoudig van Azure naar AWS of on-prem verplaatsen.
Waarom kiezen voor serverless
Serverless gaan in Azure – bijvoorbeeld met Azure Functions – kan in veel situaties een goede keuze zijn.
Met serverless hoef je je geen zorgen te maken over het file system, afhankelijkheden of het opzetten van Docker containers. Heb je kortdurende of onregelmatige workloads? Dan betaal je alleen als je code daadwerkelijk draait.
Over het algemeen past het goed bij event-driven workloads die kort draaien en automatisch moeten kunnen schalen. Maar vooral als je snel naar de markt wilt, is het ideaal. Je hebt een idee en je wilt snel code live zetten om omzet te genereren – dan werkt het. Ook al is het tijdelijk. Met Azure Functions ship je snel code naar productie.
Maar wat als het succesvoller wordt dan je dacht? Op een bepaald moment loop je tegen de grenzen van serverless aan.
Zolang je business logic achter een API controller zit, is migratie vaak eenvoudig. Je kunt het dan verplaatsen naar containers, overstappen op Kubernetes en serverless achter je laten.
Waarom kiezen voor containers
We zeiden net dat serverless goed werkt voor event-driven apps… maar dat betekent niet dat je met containers geen stateless, event-driven toepassingen kunt bouwen. Dat kan zeker.
En er zijn genoeg redenen om containers te omarmen, hier een paar:
- Containers zijn top voor het migreren van legacy apps. Zelfs oudere .NET apps zoals .NET 4 kun je vaak vrij snel containerizen met een Dockerfile en draaien in Windows containers.
- In tegenstelling tot serverless starten containers vaak binnen seconden en kun je ze daarna bijna overal draaien.
- Bij serverless zit je sneller vast aan vendor lock-in. Met containers heb je die beperking niet.
- Containers zijn niet gebonden aan één programmeertaal – je kunt elke taal gebruiken.