Was ist serverlos? Serverless Computing erklärt

Entwickler verbringen unzählige Stunden damit, geschäftliche Probleme mit Code zu lösen. Dann ist das Ops-Team an der Reihe, unzählige Stunden zu verbringen, um herauszufinden, wie der Code, den Entwickler schreiben und auf allen verfügbaren Computern ausführen, und um sicherzustellen, dass diese Computer reibungslos funktionieren. Der zweite Teil ist wirklich eine unendliche Aufgabe. Warum nicht diesen Teil jemand anderem überlassen?

In den letzten zwei Jahrzehnten wurden in der IT viele Innovationen - virtuelle Maschinen, Cloud Computing, Container - durchgeführt, um sicherzustellen, dass Sie nicht viel über die zugrunde liegende physische Maschine nachdenken müssen, auf der Ihr Code ausgeführt wird. Serverless Computing ist ein zunehmend beliebtes Paradigma, das diesen Wunsch zu seiner logischen Schlussfolgerung führt: Beim Serverless Computing müssen Sie nichts über die Hardware oder das Betriebssystem wissen , auf dem Ihr Code ausgeführt wird, da alles von einem Dienstanbieter für Sie erledigt wird .

Was ist Serverless Computing?

Serverless Computing ist ein Ausführungsmodell für die Cloud, bei dem ein Cloud-Anbieter nur die Rechenressourcen und den Speicher, die zum Ausführen eines bestimmten Codeteils erforderlich sind, dynamisch zuweist und dem Benutzer dann Gebühren berechnet. Natürlich sind immer noch Server beteiligt, aber deren Bereitstellung und Wartung wird vollständig vom Anbieter übernommen. Chris Munns, der Befürworter von Amazon für Serverless, sagte auf einer Konferenz 2017, dass aus Sicht des Teams, das den Code schreibt und bereitstellt, „überhaupt keine Server verwaltet oder bereitgestellt werden müssen. Dies beinhaltet nichts, was Bare-Metal wäre, nichts, was virtuell ist, nichts, was ein Container ist - alles, was Sie mit der Verwaltung eines Hosts, dem Patchen eines Hosts oder dem Umgang mit irgendetwas auf Betriebssystemebene zu tun haben, sollten Sie nicht tun Serverlose Welt. " 

Wie Entwickler Mike Roberts erklärt, wurde der Begriff früher für sogenannte Back-End-as-a-Service- Szenarien verwendet, in denen eine mobile App eine Verbindung zu einem Back-End-Server herstellte, der vollständig in der Cloud gehostet wurde. Wenn Menschen heute von Serverless Computing oder einer Serverless-Architektur sprechen , meinen sie Function-as-a-Service- Angebote, bei denen ein Kunde Code schreibt, der nur die Geschäftslogik berücksichtigt und ihn zu einem Anbieter hochlädt. Dieser Anbieter kümmert sich um die gesamte Hardwarebereitstellung, die Verwaltung virtueller Maschinen und Container sowie um Aufgaben wie Multithreading, die häufig in Anwendungscode integriert sind.

Serverlose Funktionen sind ereignisgesteuert, dh der Code wird nur aufgerufen, wenn er durch eine Anforderung ausgelöst wird. Der Anbieter berechnet nur die für diese Ausführung verwendete Rechenzeit und keine monatliche Pauschalgebühr für die Wartung eines physischen oder virtuellen Servers. Diese Funktionen können miteinander verbunden werden, um eine Verarbeitungspipeline zu erstellen, oder sie können als Komponenten einer größeren Anwendung dienen und mit anderem Code interagieren, der in Containern oder auf herkömmlichen Servern ausgeführt wird.

Vor- und Nachteile von Serverless Computing

Aus dieser Beschreibung sollten zwei der größten Vorteile von Serverless Computing hervorgehen: Entwickler können sich auf die Geschäftsziele des von ihnen geschriebenen Codes konzentrieren und nicht auf infrastrukturelle Fragen. Unternehmen zahlen nur für die Rechenressourcen, die sie tatsächlich verwenden, sehr detailliert, anstatt physische Hardware zu kaufen oder Cloud-Instanzen zu mieten, die größtenteils im Leerlauf sind.

Wie Bernard Golden betont, ist dieser letztere Punkt für ereignisgesteuerte Anwendungen von besonderem Vorteil. Beispielsweise haben Sie möglicherweise eine Anwendung, die die meiste Zeit inaktiv ist, aber unter bestimmten Bedingungen viele Ereignisanforderungen gleichzeitig verarbeiten muss. Oder Sie haben möglicherweise eine Anwendung, die Daten verarbeitet, die von IoT-Geräten mit eingeschränkter oder intermittierender Internetverbindung gesendet werden. In beiden Fällen würde der herkömmliche Ansatz die Bereitstellung eines leistungsfähigen Servers erfordern, der Spitzenarbeitskapazitäten bewältigen kann - dieser Server wird jedoch die meiste Zeit nicht ausreichend genutzt. Bei einer Architektur ohne Server zahlen Sie nur für die Serverressourcen, die Sie tatsächlich verwenden. Serverless Computing eignet sich auch für bestimmte Arten der Stapelverarbeitung.Eines der kanonischen Beispiele für einen Anwendungsfall ohne serverlose Architektur ist ein Dienst, der eine Reihe einzelner Bilddateien hochlädt, verarbeitet und an einen anderen Teil der Anwendung sendet.

Der vielleicht offensichtlichste Nachteil von Funktionen ohne Server ist, dass sie absichtlich kurzlebig und, wie AlexSoft es ausdrückt, „für langfristige Aufgaben ungeeignet“ sind. Die meisten serverlosen Anbieter lassen Ihren Code nicht länger als ein paar Minuten ausführen. Wenn Sie eine Funktion starten, werden keine statusbehafteten Daten von zuvor ausgeführten Instanzen gespeichert. Ein damit verbundenes Problem besteht darin, dass das Hochfahren von serverlosem Code mehrere Sekunden dauern kann - für viele Anwendungsfälle kein Problem. Wenn Ihre Anwendung jedoch eine geringe Latenz erfordert, sollten Sie gewarnt werden.

Viele der anderen Nachteile, auf die Rohit Akiwatkar und Gary Arora hingewiesen haben, haben mit der Lieferantenbindung zu tun. Obwohl Open Source-Optionen verfügbar sind, wird der Markt ohne Server von den großen kommerziellen Cloud-Anbietern dominiert, wie wir gleich diskutieren werden. Das bedeutet, dass Entwickler häufig Tools von ihren Anbietern verwenden, was es schwierig macht, zu wechseln, wenn sie unzufrieden werden. Und da so viel Serverless Computing per Definition in der Infrastruktur des Anbieters stattfindet, kann es schwierig sein, Serverless Code in interne Entwicklungs- und Test-Pipelines zu integrieren.

Serverlose Anbieter: AWS Lambda, Azure-Funktionen und Google Cloud-Funktionen

Das moderne Zeitalter des Serverless Computing begann mit der Einführung von AWS Lambda, einer Plattform, die auf dem Cloud-Service von Amazon basiert. Microsoft folgte 2016 mit Azure Functions. Google Cloud Functions, das seit 2017 in der Beta-Phase war, erreichte schließlich den Produktionsstatus im Juli 2018. Die drei Dienste haben leicht unterschiedliche Einschränkungen, Vorteile, unterstützte Sprachen und Vorgehensweisen. Rohit Akiwatkar hat einen guten und detaillierten Überblick über die Unterschiede zwischen den drei. Ebenfalls im Einsatz sind IBM Cloud Functions, die auf der Open Source Apache OpenWhisk-Plattform basieren.

Unter allen serverlosen Computerplattformen ist AWS Lambda die bekannteste und hatte offensichtlich die meiste Zeit, sich weiterzuentwickeln und zu reifen. AWS Lambda wurde im vergangenen Jahr über Updates und neue Funktionen informiert.

Serverlose Stapel

Wie ist der Fall in vielen Software - Bereichen hat die serverless Welt die Entwicklung des gesehenen Stapels von Software, die verschiedenen Komponenten zusammen zu bringen benötigten eine serverlose Anwendung zu erstellen. Jeder Stapel besteht aus einer Programmierung Sprache , dass Sie den Code in einem schreiben wollen Anwendungs - Framework , das eine Struktur für Ihren Code bereitstellt, und eine Reihe von Auslösern , dass die Plattform verstehen und verwenden , die Ausführung von Code zu initiieren.

Während Sie in jeder dieser Kategorien verschiedene spezifische Angebote kombinieren können, gibt es je nach verwendetem Anbieter Einschränkungen mit einigen Überschneidungen. Für Sprachen können Sie beispielsweise Node.js, Java, Go, C # und Python unter AWS Lambda verwenden, aber nur JavaScript, C # und F # funktionieren nativ mit Azure-Funktionen. Wenn es um Trigger geht, hat AWS Lambda die längste Liste, aber viele davon sind spezifisch für die AWS-Plattform, wie Amazon Simple Email Service und AWS CodeCommit. Google Cloud-Funktionen können unterdessen durch generische HTTP-Anforderungen ausgelöst werden. Paul Jaworski hat einen detaillierten Blick auf die Stapel für jedes der drei großen Angebote.

Serverlose Frameworks

Es lohnt sich, ein wenig auf den Framework- Teil der Gleichung einzugehen, da dies viel darüber bestimmt, wie Sie am Ende Ihre Anwendung erstellen. Amazon hat sein eigenes natives Angebot, das Open Source Serverless Application Model (SAM), aber es gibt auch andere, von denen die meisten plattformübergreifend und auch Open Source sind. Eine der beliebtesten wird allgemein als serverlos bezeichnet und betont, dass sie für jede unterstützte Plattform dieselbe Erfahrung bietet, z. B. AWS Lambda, Azure-Funktionen, Google Cloud-Funktionen und IBM OpenWhisk. Ein weiteres beliebtes Angebot ist Apex, mit dessen Hilfe einige Sprachen, die bei bestimmten Anbietern sonst nicht verfügbar sind, in den Kampf gezogen werden können.

Serverlose Datenbanken

Wie oben erwähnt, besteht eine Besonderheit bei der Arbeit mit serverlosem Code darin, dass kein dauerhafter Status vorliegt. Dies bedeutet, dass die Werte lokaler Variablen nicht über Instanziierungen hinweg bestehen bleiben. Alle persistenten Daten, auf die Ihr Code zugreifen muss, müssen an anderer Stelle gespeichert werden. Die in den Stapeln für die wichtigsten Anbieter verfügbaren Trigger enthalten alle Datenbanken, mit denen Ihre Funktionen interagieren können.

Einige dieser Datenbanken werden selbst als serverlos bezeichnet. Dies bedeutet, dass sie sich ähnlich wie andere Funktionen ohne Server verhalten, die wir in diesem Artikel beschrieben haben, mit der offensichtlichen Ausnahme, dass Daten unbegrenzt gespeichert werden. Ein Großteil des Verwaltungsaufwands für die Bereitstellung und Wartung einer Datenbank entfällt jedoch. Wie Entwickler Jeremy Daly es ausdrückt: "Alles, was Sie tun müssen, ist, einen Cluster zu konfigurieren, und dann werden alle Wartungs-, Patch-, Sicherungs-, Replikations- und Skalierungsarbeiten automatisch für Sie erledigt." Wie bei Function-as-a-Service-Angeboten zahlen Sie nur für die tatsächlich genutzte Rechenzeit, und die Ressourcen werden nach Bedarf auf und ab geschleudert, um der Nachfrage zu entsprechen.

Die drei großen Anbieter ohne Server bieten jeweils ihre eigenen Datenbanken ohne Server an: Amazon verfügt über Aurora Serverless und DynamoDB, Microsoft über Azure Cosmos DB und Google über Cloud Firestore. Dies sind jedoch nicht die einzigen verfügbaren Datenbanken. Nemanja Novkovic hat Informationen zu weiteren Angeboten.

Serverless Computing und Kubernetes

Container helfen dabei, serverlose Technologie unter die Haube zu bringen, aber der Verwaltungsaufwand wird vom Anbieter übernommen und ist somit für den Benutzer unsichtbar. Viele sehen in Serverless Computing eine Möglichkeit, viele der Vorteile von containerisierten Mikrodiensten zu nutzen, ohne sich mit ihrer Komplexität auseinandersetzen zu müssen, und beginnen sogar, über eine Post-Container-Welt zu sprechen.

In Wahrheit werden Container und Serverless Computing mit ziemlicher Sicherheit noch viele Jahre nebeneinander existieren, und tatsächlich können Serverless-Funktionen in derselben Anwendung wie containerisierte Microservices vorhanden sein. Kubernetes, die beliebteste Container-Orchestrierungsplattform, kann auch serverlose Infrastrukturen verwalten. In der Tat können Sie mit Kubernetes verschiedene Arten von Diensten in einem einzigen Cluster integrieren.  

Serverlos offline

Die Aussicht, mit Serverless Computing zu beginnen, ist möglicherweise ein wenig einschüchternd, da Sie sich anscheinend bei einem Anbieter anmelden müssen, um herumzuspielen und zu sehen, wie es funktioniert. Aber keine Angst: Es gibt Möglichkeiten, serverlosen Code offline auf Ihrer eigenen lokalen Hardware auszuführen. Beispielsweise bietet AWS SAM eine lokale Funktion, mit der Sie Lambda-Code offline testen können. Wenn Sie das Serverless-Anwendungsframework verwenden, überprüfen Sie Serverless-Offline, ein Plug-In, mit dem Sie Code lokal ausführen können. Viel Spaß beim Experimentieren!