Serverloses Computing

Abgeschlossen

Zu Beginn des Cloud Computing konzentrierten sich Clouddienstanbieter wie Amazon und Microsoft darauf, ihren Kunden ein umfangreiches Sortiment an IaaS-Diensten anzubieten. Dadurch wurde die Entwicklung von öffentlichen Clouds vorangetrieben, da Kunden Workloads, die vor Ort auf physischen Servern oder virtuellen Computern ausgeführt wurden, relativ einfach auf virtuelle Computer in der Cloud verlagern konnten. Mit IaaS geht jedoch Verantwortung einher. Eine Organisation, die einen virtuellen Computer in der Cloud nutzt, ist auch verantwortlich für die Verwaltung der Inhalte des virtuellen Computers, also das Betriebssystem, alle benötigten Runtimes, Anwendungen, die diese Runtimes nutzen, usw.

PaaS überträgt einen Teil dieser Verantwortung auf den Clouddienstanbieter, wodurch Investitionen in die Cloud weiter angekurbelt wurden. Mit Diensten wie AWS Elastic Beanstalk und Azure App Service können Kunden virtuelle Webserver bereitstellen, die mit beliebten Laufzeiten wie Java, Node.js und Microsoft .NET bereitgestellt werden, und Software darauf innerhalb weniger Minuten ausführen. Obwohl virtuelle Computer die Schwerstarbeit im Hintergrund erledigen, wird das Vorhandensein dieser virtuellen Computer weitgehend abstrahiert. Mit PaaS können Kunden sich auf die Anwendungen konzentrieren, die sie schreiben, um Geschäftsprobleme zu lösen, anstatt Zyklen mit der Verwaltung virtueller Computer und der Aktualisierung der Plattformen zu verbringen.

Das serverlose Computing ist eine relativ neue Innovation im Cloud Computing, die solche Abstraktionen noch weiter treibt. Angenommen, Ihre Organisation schreibt und verwaltet Code, der nächtliche Sicherungen von unternehmenskritischen Daten durchführt, wöchentliche Abrechnungsläufe ausführt oder eine elektronische Zahlung überträgt, wenn eine Rechnung in den Cloudspeicher hochgeladen wird. In diesem Fall besteht das übergeordnete Ziel darin, diesen Code zum richtigen Zeitpunkt auszuführen. Alles andere ist zweitrangig, darunter auch, wo der Code gespeichert ist und wie und wo er ausgeführt wird.

Sie können einen IaaS-Ansatz verfolgen, indem Sie einen oder mehrere virtuelle Computer erstellen, um Ihren Code auszuführen und die erforderlichen Plattformen und Bibliotheken zu installieren. Sie können eine Elastic Beanstalk- oder App Service-Instanz bereitstellen und den Code dort hosten. Alternativ können Sie eine Funktionslaufzeit wie AWS Lambda oder Azure Functions verwenden, um Ihren Code immer dann auszuführen, wenn Sie möchten, unabhängig davon, wo oder wie er gehostet wird. AWS Lambda und Azure Functions sind Beispiele für serverloses Computing (insbesondere für serverlose Funktionen), ebenso wie Google Cloud Functions. Alle drei stellen den nächsten Schritt in der natürlichen Weiterentwicklung des Cloud Computing dar, von IaaS, wo Sie für alles verantwortlich sind, hin zu serverlosem Computing, bei dem Sie sich auf die Aktionen konzentrieren, die Sie in der Cloud durchführen möchten (den Code, den Sie ausführen möchten), und alles andere dem Anbieter überlassen.

Serverlose Funktionen, die von Funktionslaufzeiten in der Cloud ausgeführt werden, sind die gängigste Form von serverlosem Computing, jedoch nicht die einzige Form. Amazon, Microsoft und Google bieten serverlose Versionen einiger ihrer anderen PaaS-Dienste, einschließlich serverloser Datenbanken. Einige Anbieter bieten Unterstützung für serverlose Workflows, mit denen Sie Geschäftsworkflows in der Cloud definieren und als Reaktion auf externe Ereignisse ausführen können, beispielsweise wenn Rechnungen in den Cloudspeicher hochgeladen werden, Timer in bestimmten Intervallen ausgelöst werden oder E-Mails in einem Posteingang eintreffen (häufig ohne Schreiben einer einzigen Codezeile). Schließlich sind viele der Containerdienste, die von Clouddienstanbietern angeboten werden (z. B. Azure Container Instances und der AWS Elastic Container Service) Beispiele für serverloses Computing, da sie es Ihnen ermöglichen, Container in der Cloud auszuführen und gleichzeitig die zugrunde liegende Infrastruktur zu abstrahieren.

Vorteile von serverlosem Computing

Das serverlose Computing bietet Organisationen, die Cloud Computing nutzen, drei wesentliche Vorteile:

Geringere Computingkosten: Kunden bezahlen in der Regel monatliche Gebühren für virtuelle IaaS-Computer und PaaS-Dienste wie Elastic Beanstalk und Azure App Service. Die Abrechnung erfolgt auch dann, wenn sich die Dienste im Leerlauf befinden. Die meisten Dienste für serverloses Computing unterstützen jedoch verbrauchsorientierte Preismodelle, bei denen Ihnen nur die Zeit in Rechnung gestellt wird, in der Ihr Code ausgeführt wird. Beispiel: Sie nutzen einen virtuellen Computer für 100 USD pro Monat, um Code auszuführen, der eine nächtliche Sicherung von unternehmenskritischen Daten durchführt, wobei der Code jeden Abend 30 Minuten lang ausgeführt wird. Sie bezahlen 100 USD pro Monat, um Code für 1/48 eines Monats, also weniger als einen Tag, auszuführen. Wenn Sie denselben Code als serverlose Funktion bereitstellen, zahlen Sie nur wenige USD pro Monat. Mit einem verbrauchsorientierten Preismodell bezahlen Sie nicht für Leerlaufzeiten.

Automatische Skalierbarkeit: Cloudanbieter bieten Mechanismen zur Skalierung von IaaS-Diensten in Produkten wie AWS Auto Scaling und VM-Skalierungsgruppen in Azure. Außerdem stellen Sie Optionen für die manuelle und automatische Skalierung für PaaS-Dienste bereit. Auch wenn die Skalierung automatisch erfolgt, muss ein Cloudadministrator die automatische Skalierung aktivieren und konfigurieren, damit der Cloudanbieter weiß, wie und wann die Skalierung erfolgen soll. Einer der grundlegenden Faktoren, die Administratoren berücksichtigen müssen, ist die Tatsache, dass Sie für einzelne Instanzen von IaaS- und PaaS-Diensten bezahlen und den Dienst daher so konfigurieren sollten, dass er ausreichend, aber nicht zu sehr skaliert wird. Serverloses Computing bietet die Möglichkeit, bei einer größeren Nachfrage transparent und automatisch hoch zu skalieren und bei einer geringeren Nachfrage herunter zu skalieren. Ein Cloudadministrator führt in der Regel keine andere Konfiguration aus, als diese Option im Dienst zu aktivieren. Wenn Sie 100 Anforderungen für die Ausführung einer serverlosen Funktion gleichzeitig erhalten, stellt der Clouddienstanbieter sicher, dass die Anforderungen parallel (oder größtenteils parallel) ausgeführt werden können. Die Kosten sind nicht betroffen, da bei einem verbrauchsorientierten Preismodell die gleichen Kosten anfallen, um eine Funktion 100 Mal auszuführen, unabhängig davon, ob die Ausführung seriell oder parallel verläuft.

Geringere Verwaltungskosten:: Mit serverlosem Computing können Sie sich auf die Ausführung von Code und Workflows konzentrieren und gleichzeitig die Verantwortung für alles andere, einschließlich der Wartung der zugrunde liegenden Plattform, an den Clouddienstanbieter abgeben.

Das serverlose Computing hat aber auch Nachteile. Beachten Sie unter anderem die folgenden Einschränkungen:

  • Einige Funktionslaufzeiten erzwingen eine Beschränkung für den Zeitraum, in dem eine Funktion ausgeführt werden darf.

  • Einige Funktionslaufzeiten garantieren nicht, dass eine Funktion sofort ausgeführt wird, es sei denn, Sie sind bereit, mehr dafür zu bezahlen. Wenn Azure Functions für die Nutzung im verbrauchsorientierten Preismodell konfiguriert ist, wird eine Funktion beispielsweise unter Umständen erst 10 Minuten nach dem Auslösen ausgeführt. Dies ist möglicherweise kein Problem bei einer nachts durchgeführten Sicherung. Es ist Ihnen wahrscheinlich egal, ob die Sicherung um 1:00 Uhr oder um 1:10 Uhr durchgeführt wird. Es könnte aber ein entscheidender Faktor bei Funktionen sein, die zeitkritisch sind, also Funktionen, die in Echtzeit (oder nahezu in Echtzeit) ausgeführt werden müssen.

  • Serverlose Funktionen sind im Allgemeinen zustandslos, d. h., sie können keine Daten intern speichern, und erwarten, dass sie von einem Funktionsaufruf zum nächsten beibehalten werden. Sie können externe Cloudspeicherdienste wie Amazon S3 und Azure Storage verwenden, um Daten zwischen den Aufrufen beizubehalten. Dadurch wird der Code der Funktion jedoch komplexer.

Einige Clouddienstanbieter bieten Unterstützung für zustandsbehaftete Funktionen (in Azure als „Durable Functions“ bezeichnet), aber Funktionen, die den Status behalten, sind eine relativ aktuelle Ergänzung zu serverlosem Computing und werden nicht universell unterstützt.

Serverlose Funktionen

Das häufigste Beispiel für serverloses Computing sind serverlose Funktionen. Sie laden Code in die Cloud hoch und legen fest, wann er ausgeführt werden soll. Der Code kann in vielen verschiedenen Sprachen geschrieben werden, einschließlich Java und C#.

In Abbildung 11 sind die Programmiersprachen aufgelistet, die von serverlosen Funktionen in Azure, AWS und GCP zum Zeitpunkt der Erstellung dieses Artikels unterstützt werden:

Sprache Azure Functions AWS Lambda Google Cloud Functions
C# x x
F# x
Go x x
Java x x
JavaScript (Node.js) x x x
PowerShell x x
Python x x x
Ruby x
TypeScript x

Abbildung 11: Übersicht, welche Programmiersprachen von populären Runtimes für serverlose Funktionen unterstützt werden

Wenn Sie eine Funktion erstellen und den Code bereitstellen, der ausgeführt werden soll, geben Sie auch das externe Ereignis an, durch das die Funktion ausgelöst werden soll. Beliebte Cloudplattformen unterstützen verschiedene Typen von Triggern, z. B. Timer, HTTP-Aufrufe und Ereignisse in anderen Clouddiensten (z. B. wenn ein Dokument in einen Cloudspeicher hochgeladen wird). So können Sie z. B. ganz einfach Code für die Abrechnung in eine Funktionsruntime hochladen und einstellen, dass er einmal pro Woche oder einmal pro Monat ausgeführt werden soll. Genauso einfach können Sie z. B. festlegen, dass eine Funktion jedes Mal aktiviert wird, wenn eine Rechnung in einen Cloudspeicher wie Amazon S3 oder Azure Storage hochgeladen wird, oder wenn der zur Funktion gehörende REST-Endpunkt aufgerufen wird.

Serverlose Funktionen werden häufig für eigenständige Aufgaben wie nächtliche Sicherungen und die Abrechnung verwendet. Daneben kommen Sie auch zum Einsatz, wenn zusätzliche Clouddienste eingebunden werden sollen, um umfangreiche Lösungen zu erstellen. In Abbildung 12 wird eine solche Lösung vorgestellt. Hierbei wurden mehrere Azure-Dienste miteinander kombiniert, um die Aktivitäten von Eisbären in der Arktis überwachen zu können. Eine Azure Functions-Funktion spielt eine entscheidende Rolle in dieser Architektur, da sie zum einen die Ausgabe von Azure Stream Analytics abruft (ausgelöst durch einen HTTP-Aufruf) und zum anderen ein Foto aus Azure Blob Storage empfängt und an mit Azure Custom Vision trainiertes Modell sendet. Dieses Modell bestimmt dann mithilfe künstlicher Intelligenz, ob auf dem Foto ein Eisbär zu sehen ist. Die Funktion verbindet Stream Analytics, Blob Storage und Custom Vision miteinander.

Abbildung 12: Einbinden anderer Azure-Dienste mithilfe einer Azure Functions-Funktion

Abbildung 12: Einbindung anderer Azure-Dienste mithilfe einer Azure Functions-Funktion.

Serverlose Workflows

Einige Dienste für serverloses Computing ermöglichen Benutzern, Unternehmensworkflows zu automatisieren, ohne dass dafür Code benötigt wird. Azure Logic Apps enthält beispielsweise mehr als 100 Connectors, mit denen Sie verschiedenste Datenquellen einbinden können – von Oracle-Datenbanken bis hin zu Diensten für soziale Netzwerke wie X. Sie bieten Trigger, mit denen Sie angeben können, wann Workflows ausgelöst werden sollen (z. B. immer, wenn eine Datei in Box.com hochgeladen oder unter einem bestimmten Hashtag ein neuer Tweet veröffentlicht wird). Außerdem haben Sie Zugriff auf Hunderte vordefinierter Aktionen, die definieren, was geschieht, wenn ein Trigger ausgelöst wird und die miteinander verkettet werden können, um komplexe Workflows zu bilden. Darüber hinaus gibt es noch Bedingungen, mit denen Sie angeben können, dass Aktionen nur erfolgen sollen, wenn bestimmte Bedingungen erfüllt sind. Die Möglichkeiten von Azure Logic Apps sind quasi unbegrenzt, da Sie in diesem Dienst auch Azure Functions-Funktionen nutzen können. Wenn ein Workflow benutzerdefinierte Logik umfasst, die nicht in einer Aktion gekapselt ist, können Sie den Code bereitstellen, der diese Logik implementiert, und ihn in den Workflow einschließen, als wäre er eine vordefinierte Aktion.

Abbildung 13 zeigt solch einen Workflow im Azure Logic Apps-Designer1. Wenn eine E-Mail eingeht, prüft die Logik-App, ob der Betreff bestimmte Schlüsselwörter enthält und ob ein Anhang vorhanden ist. Sind beide Bedingungen erfüllt, ruft die Logik-App eine Azure Functions-Funktion auf, um in der E-Mail vorhandenen HTML-Code zu entfernen. Anschließend werden die bereinigte E-Mail und ihre Anhänge in Azure Blob Storage gespeichert. Danach wird eine E-Mail an vorher festgelegte Empfänger versendet, die Links zu den relevanten Dokumenten in Blog Storage enthält, damit diese Personen sie prüfen können. In diesem Beispiel werden zwei serverlose Paradigmen kombiniert: eine Logik-App, die Aktionen ohne Code ausführt (zumindest nicht mit Code, der in Ihrer Organisation geschrieben wurde), und eine Azure Functions-Funktion, die den Code enthält, den Sie für die Workflowanpassung bereitgestellt haben. Das Beispiel verdeutlicht den Wechsel bei Cloud Computing von virtuellen Computern, auf denen Benutzer*innen selbst Aktionen veranlassen, hin zu höherer Abstraktion, die es Organisationen ermöglicht, sich vermehrt um Probleme Ihres Unternehmens als um das Verwalten von virtuellen Computern und das Installieren und Warten von Runtimes zu kümmern.

Abbildung 13: Definieren eines Workflows in Azure Logic Apps

Abbildung 13: Definieren eines Workflows in Azure Logic Apps.

Amazon bietet mit AWS Step Functions einen ähnlichen Dienst. Damit können Sie visuelle Workflows erstellen, bei denen auch andere Dienste wie AWS Lambda und AWS ECS eingebunden sind. Workflows bestehen aus einer Reihe von Schritten, wobei die Ausgabe eines Schritt die Eingabe für den nächsten bildet. Wie Azure Logic Apps, bietet Ihnen auch AWS Step Functions Grundtypen für Verzweigungen und parallele Ausführung, sodass Sie selbst keinen Code dafür schreiben müssen. So wird aus einem Unternehmensworkflow ein Zustandsautomatdiagramm, das leicht zu verstehen, erklären und bearbeiten ist.

Serverlose Datenbanken

In den frühen Tagen von Cloud Computing waren für das Hosten einer Datenbank in der Cloud ein virtueller Computer und ein Datenbankprodukt wie MySQL, PostgreSQL oder SQL Server erforderlich. Seit im Rahmen von Platform as a Service (PaaS) auch Datenbanken verfügbar sind, hat sich das geändert. Sie stellen einfach nur eine Instanz bereit, z. B. mit Azure SQL-Datenbank oder mit Relational Database Service (RDS). So erhalten Sie innerhalb von Minuten eine in der Cloud gehostete Datenbank für Clients. Darüber hinaus müssen Sie sich nicht darum kümmern, dass die Datenbankplattform auf dem neuesten Stand ist. Der Cloud-Dienstanbieter übernimmt die Installation von Softwareupdates und Patches.

Eine neuere Innovation im Bereich Cloud Computing sind serverlose Datenbanken. Sie bieten ein optimiertes Preis-Leistungs-Verhältnis und eigenen sich für einzelne Datenbanken mit unregelmäßigen Nutzungsmustern. Azure bietet z. B. eine serverlose Version von Azure SQL-Datenbank an. Bei der normalen Version von Azure SQL-Datenbank wählen Sie basierend auf der maximalen Last, die Ihre Datenbank bewältigen können soll, eine Preis-Leistungs-Stufe aus. Wenn bei Ihrer Datenbank nur hin und wieder Lastspitzen auftreten, zahlen Sie dadurch häufig so viel, als würde ständig eine hohe Auslastung vorliegen.

Bei der serverlosen Version von Azure SQL-Datenbank besteht dieses Problem nicht, da die Datenbank an die auftretenden Lasten angepasst wird (Skalierung). Sie zahlen für die Rechenleistung und den Speicher. Wie bei serverlosen Funktionen wird hier ein Verbrauchsmodell angewendet, weshalb Sie nur das bezahlen, was Sie tatsächlich gebraucht haben. Amazon bietet einen ähnlichen Dienst an. AWS Aurora Serverless ist eine serverlose Version des Datenbankdiensts Aurora von Amazon. Google hat einen serverlosen NoSQL-Datenbankdienst namens Google Cloud Firestone im Programm.

Literatur

  1. Microsoft (2019). Automatisieren der Verarbeitung von E-Mails und Anlagen mit Azure Logic Apps. https://learn.microsoft.com/azure/logic-apps/tutorial-process-email-attachments-workflow.

Überprüfen Sie Ihr Wissen

1.

Welches der folgenden Szenarios ist KEIN Szenario, bei dem Sie eine Lösung für serverloses Computing in Erwägung ziehen können?