Wat is serverloos? Serverless computing uitgelegd

Ontwikkelaars besteden talloze uren aan het oplossen van bedrijfsproblemen met code. Daarna is het de beurt aan het ops-team om talloze uren te besteden, om eerst uit te zoeken hoe de code die ontwikkelaars schrijven op de beschikbare computers kunnen worden gebruikt en ten tweede ervoor te zorgen dat die computers soepel werken. Het tweede deel is echt een nooit eindigende taak. Waarom laat u dat deel niet aan iemand anders over?

Veel innovatie in IT in de afgelopen twee decennia - virtuele machines, cloud computing, containers - was erop gericht ervoor te zorgen dat u niet veel na hoeft te denken over de onderliggende fysieke machine waarop uw code draait. Serverless computing is een steeds populairder paradigma dat deze wens is om zijn logische conclusie: Met serverloze computing, hoef je niet te weten iets over de hardware of OS uw code draait op, want het is allemaal verzorgd voor u door een service provider .

Wat is serverloos computergebruik?

Serverloos computergebruik is een uitvoeringsmodel voor de cloud waarin een cloudprovider alleen de rekenresources en opslagruimte die nodig zijn om een ​​bepaald stuk code uit te voeren, dynamisch toewijst - en vervolgens de gebruiker in rekening brengt. Uiteraard zijn er nog steeds servers bij betrokken, maar de provisioning en het onderhoud worden volledig door de provider verzorgd. Chris Munns, Amazons pleitbezorger voor serverless, zei op een conferentie in 2017 dat, vanuit het perspectief van het team dat de code schrijft en implementeert, “er helemaal geen servers zijn om te beheren of in te richten. Dit omvat niets dat kaal zou zijn, niets dat virtueel zou zijn, niets dat een container is - alles wat te maken heeft met het beheren van een host, het patchen van een host of het afhandelen van iets op het niveau van het besturingssysteem, is niet iets dat u in de serverloze wereld. " 

Zoals ontwikkelaar Mike Roberts uitlegt, werd de term ooit gebruikt voor zogenaamde back-end-as-a-service- scenario's, waarbij een mobiele app verbinding zou maken met een back-end-server die volledig in de cloud wordt gehost. Maar als mensen het tegenwoordig hebben over serverless computing, of een serverloze architectuur, bedoelen ze function-as-a-service- aanbiedingen, waarbij een klant code schrijft die alleen zakelijke logica aanpakt en deze uploadt naar een provider. Die provider zorgt voor alle hardware-provisioning, virtuele machine- en containerbeheer, en zelfs taken zoals multithreading die vaak in applicatiecode zijn ingebouwd.

Serverloze functies zijn gebeurtenisgestuurd, wat betekent dat de code alleen wordt aangeroepen wanneer deze wordt geactiveerd door een verzoek. De provider rekent alleen de rekentijd die door die uitvoering wordt gebruikt, in plaats van een vast maandelijks bedrag voor het onderhouden van een fysieke of virtuele server. Deze functies kunnen met elkaar worden verbonden om een ​​verwerkingspijplijn te creëren, of ze kunnen dienen als componenten van een grotere applicatie, in wisselwerking met andere code die in containers of op conventionele servers wordt uitgevoerd.

Voordelen en nadelen van serverloos computergebruik

Uit die beschrijving zouden twee van de grootste voordelen van serverloos computergebruik duidelijk moeten zijn: ontwikkelaars kunnen zich concentreren op de zakelijke doelen van de code die ze schrijven, in plaats van op infrastructurele vragen; en organisaties betalen alleen voor de rekenresources die ze daadwerkelijk gebruiken op een zeer gedetailleerde manier, in plaats van fysieke hardware te kopen of cloudinstances te huren die meestal inactief zijn.

Zoals Bernard Golden opmerkt, is dat laatste punt vooral van belang voor event-gestuurde applicaties. U kunt bijvoorbeeld een toepassing hebben die een groot deel van de tijd inactief is, maar onder bepaalde omstandigheden veel gebeurtenisverzoeken tegelijk moet afhandelen. Of misschien heeft u een toepassing die gegevens verwerkt die worden verzonden vanaf IoT-apparaten met beperkte of intermitterende internetverbinding. In beide gevallen zou de traditionele aanpak vereisen dat er een stevige server moet worden voorzien die piekcapaciteiten aankan, maar die server wordt meestal onderbenut. Met een serverloze architectuur betaalt u alleen voor de serverbronnen die u daadwerkelijk gebruikt. Serverloos computergebruik zou ook goed zijn voor specifieke soorten batchverwerking.Een van de canonieke voorbeelden van een serverloze architectuur-use case is een service die een reeks afzonderlijke afbeeldingsbestanden uploadt en verwerkt en deze naar een ander deel van de applicatie stuurt.

Misschien wel het meest voor de hand liggende nadeel van serverloze functies is dat ze opzettelijk kortstondig zijn en, zoals AlexSoft het stelt, "ongeschikt voor langetermijntaken". De meeste serverloze providers laten uw code niet langer dan een paar minuten uitvoeren, en wanneer u een functie start, bewaart deze geen stateful gegevens van eerder uitgevoerde instanties. Een gerelateerd probleem is dat het enkele seconden kan duren voordat serverloze code is opgestart - geen probleem voor veel gevallen, maar als uw toepassing een lage latentie vereist, wees dan gewaarschuwd.

Veel van de andere nadelen, zoals aangegeven door Rohit Akiwatkar en Gary Arora, hebben te maken met vendor lock-in. Hoewel er open source-opties beschikbaar zijn, wordt de serverloze markt gedomineerd door de grote commerciële cloudproviders, zoals we zo dadelijk zullen bespreken. Dat betekent dat ontwikkelaars vaak tooling van hun leveranciers gebruiken, waardoor het moeilijk is om over te schakelen als ze ontevreden worden. En omdat zoveel serverloos computergebruik per definitie plaatsvindt op de infrastructuur van de leverancier, kan het moeilijk zijn om serverloze code te integreren in interne ontwikkelings- en testpijplijnen.

Serverloze leveranciers: AWS Lambda, Azure Functions en Google Cloud Functions

Het moderne tijdperk van serverloos computergebruik begon met de lancering van AWS Lambda, een platform gebaseerd op de cloudservice van Amazon, in 2014. Microsoft volgde dit voorbeeld met Azure Functions in 2016. Google Cloud Functions, dat sinds 2017 in bèta was, bereikte eindelijk de productiestatus in juli 2018. De drie services hebben enigszins verschillende beperkingen, voordelen, ondersteunde talen en manieren om dingen te doen. Rohit Akiwatkar heeft een goed en gedetailleerd overzicht van de verschillen tussen de drie. Ook in de running is IBM Cloud Functions, die is gebaseerd op het open source Apache OpenWhisk-platform.

Van alle serverloze computerplatforms is AWS Lambda de meest prominente en heeft duidelijk de meeste tijd gehad om te evolueren en volwassen te worden. heeft bericht over updates en nieuwe functies die het afgelopen jaar aan AWS Lambda zijn toegevoegd.

Serverloze stapels

Zoals het geval is in veel softwaregebieden, heeft de serverloze wereld de evolutie gezien van stapels software, die verschillende componenten samenbrengen die nodig zijn om een ​​serverloze applicatie te bouwen. Elke stapel bestaat uit een programmeertaal taal dat je gaat naar de code in een brief applicatie framework dat een structuur biedt voor uw code, en een set van triggers dat het platform zal begrijpen en te gebruiken code-uitvoering te starten.

Hoewel u verschillende specifieke aanbiedingen in elk van deze categorieën kunt combineren, zijn er beperkingen, afhankelijk van de leverancier die u gebruikt, met enige overlap. Voor talen kunt u bijvoorbeeld Node.js, Java, Go, C # en Python gebruiken op AWS Lambda, maar alleen JavaScript, C # en F # werken native op Azure-functies. Als het op triggers aankomt, heeft AWS Lambda de langste lijst, maar veel ervan zijn specifiek voor het AWS-platform, zoals Amazon Simple Email Service en AWS CodeCommit; Google Cloud-functies kunnen worden geactiveerd door algemene HTTP-verzoeken. Paul Jaworski heeft een diepgaande blik op de stapels voor elk van de drie grote aanbiedingen.

Serverloze frameworks

Het is de moeite waard om even bij het raamwerkgedeelte van de vergelijking te blijven, aangezien dat veel zal bepalen over hoe u uiteindelijk uw applicatie gaat bouwen. Amazon heeft zijn eigen native aanbod, het open source Serverless Application Model (SAM), maar er zijn ook andere, waarvan de meeste platformonafhankelijk en ook open source zijn. Een van de meest populaire heet, vrij algemeen, Serverless, en benadrukt dat het dezelfde ervaring biedt op elk ondersteund platform, dwz AWS Lambda, Azure Functions, Google Cloud Functions en IBM OpenWhisk. Een ander populair aanbod is Apex, dat kan helpen om sommige talen die anders niet beschikbaar waren op bepaalde providers in de strijd te brengen.

Serverloze databases

Zoals we hierboven hebben opgemerkt, is een eigenaardigheid van het werken met serverloze code dat deze geen persistente status heeft, wat betekent dat de waarden van lokale variabelen niet blijven bestaan ​​tussen instantiaties. Alle permanente gegevens die uw code nodig heeft om toegang te krijgen, moeten ergens anders worden opgeslagen, en de triggers die beschikbaar zijn in de stapels van de belangrijkste leveranciers bevatten allemaal databases waarmee uw functies kunnen communiceren.

Sommige van deze databases worden zelf serverloos genoemd. Dit betekent dat ze zich net zo gedragen als andere serverloze functies die we in dit artikel hebben besproken, met de voor de hand liggende uitzondering dat gegevens voor onbepaalde tijd worden opgeslagen. Maar veel van de beheeroverhead die gepaard gaat met het inrichten en onderhouden van een database, wordt terzijde geschoven. Zoals ontwikkelaar Jeremy Daly het stelt: "Het enige dat u hoeft te doen, is een cluster configureren, waarna al het onderhoud, patching, back-ups, replicatie en schaalvergroting automatisch voor u worden afgehandeld." Net als bij Function-as-a-Service-aanbiedingen, betaalt u alleen voor de rekentijd die u daadwerkelijk gebruikt, en resources worden naar behoefte op en neer gedraaid om aan de vraag te voldoen.

De drie grote serverloze providers bieden elk hun eigen serverloze databases: Amazon heeft Aurora Serverless en DynamoDB, Microsoft heeft Azure Cosmos DB en Google heeft Cloud Firestore. Dit zijn echter niet de enige beschikbare databases. Nemanja Novkovic heeft informatie over meer aanbiedingen.

Serverloos computergebruik en Kubernetes

Containers helpen serverloze technologie onder de motorkap van stroom te voorzien, maar de overhead van het beheer ervan wordt verzorgd door de verkoper en is dus onzichtbaar voor de gebruiker. Velen zien serverless computing als een manier om veel van de voordelen van gecontaineriseerde microservices te krijgen zonder met hun complexiteit om te gaan, en beginnen zelfs te praten over een post-containerwereld.

In werkelijkheid zullen containers en serverless computing vrijwel zeker nog vele jaren naast elkaar bestaan, en in feite kunnen serverloze functies in dezelfde applicatie bestaan ​​als gecontaineriseerde microservices. Kubernetes, het meest populaire platform voor containerorkestratie, kan ook serverloze infrastructuur beheren. Met Kubernetes kunt u inderdaad verschillende soorten services op één cluster integreren.  

Offline zonder server

Misschien vind je het vooruitzicht om aan de slag te gaan met serverloos computergebruik een beetje intimiderend, omdat het lijkt alsof je je moet aanmelden bij een leverancier om te spelen en te zien hoe het werkt. Maar vrees niet: er zijn manieren om serverloze code offline uit te voeren op uw eigen lokale hardware. De AWS SAM biedt bijvoorbeeld een lokale functie waarmee u Lambda-code offline kunt testen. En als u het serverloze toepassingsframework gebruikt, bekijk dan serverless-offline, een plug-in waarmee u lokaal code kunt uitvoeren. Veel plezier met experimenteren!