iX Special 2019
S. 66
Softwareentwicklung
Cloud

Serverless Computing verstehen und anwenden

Eisenmangel

Lars Röwekamp

Beim Serverless Computing stellt ein Cloud-Anbieter eine Laufzeitumgebung zur Ausführung von Programmfunktionen bereit (Function as a Service). Entwickler können sich so ganz auf ihren Code konzentrieren.

Enterprise-Projekte sind in Bezug auf die umzusetzende Fachlichkeit und für die zur Laufzeit benötigte Infrastruktur komplex. Oft bringt man die Entwicklung und Bereitstellung entsprechender Anwendungen daher mit umständlichen Entwicklungsprozessen, übergroßen Projektstrukturen, schwergewichtigen Anwendungsservern, langsamen Test- und Deployment-­Zyklen sowie komplexer Provisionierung in Verbindung.

Microservices inklusive Runtimes wie Spring Boot oder Eclipse MicroProfile vereinfachen zwar die Entwicklung, doch optimal wäre es erst, wenn Entwickler sich nur noch um die Implementierung der fachlichen Bausteine und nicht um die Plattform kümmern müssten, auf der sie laufen.

Ein primäres Ziel in der Anwendungsentwicklung sollte es sein, dass sich Entwickler auf die Umsetzung der Anwendung konzentrieren können. In der Realität sieht das oft anders aus. Ein Großteil der Projektzeit verwenden sie nicht dafür, sondern für das korrekte Aufsetzen und Betreiben der zur Laufzeit benötigten Infrastruktur und Backend-Services. Eine Erleichterung sollen die unterschiedlichen Cloud-Angebote liefern. Angefangen bei virtuellen Rechnern (Infrastructure as a Service, IaaS) über Datenbanken, Dateisysteme oder Anwendungsserver (Platform as a Service, PaaS) bis hin zu komplexen Softwareanwendungen (Software as a Service, SaaS) kann sich ein Cloud-affines Entwicklerteam heutzutage einer breiten Palette an Diensten innerhalb der Cloud bedienen.

Mithilfe der Cloud-Dienste lässt sich in allen Phasen des Softwarelebenszyklus ein großer Teil des Entwicklungs- und operationalen Aufwands einsparen. Ein weiterer Vorteil ist die automatische Skalierung. Durch die Verlagerung von Infrastruktur in die Cloud kann eine Anwendung on the fly skalieren. Die Provisionierung von Ressourcen wird zum Kinderspiel. Die Bereitstellung zusätzlicher Rechnerinstanzen erfolgt binnen Minuten statt Tagen oder Wochen. Das gilt auch für Datenbanken und Plattenplatz. Auch die fachliche Anwendung selbst lässt sich durch automatische Replikation der Anwendungsserver binnen Minuten um weitere Instanzen erweitern – Routing und Load Balancing inklusive. Die Abrechnung erfolgt in der Regel nach den belegten Ressourcen. Hohe Initialkosten und somit ein nur schwer kalkulierbares Projektrisiko gehören der Vergangenheit an.

Wie aber passt nun Serverless Computing in dieses Bild? Serverless Computing versucht, das Paradigma der automatischen Provisionierung und bedarfsgerechten Skalierung auf die fachliche Logik einer Anwendung auszuweiten. Dies umfasst zwei Varianten: Backend as a Service (BaaS) und Function as a Service (FaaS).

Bei Backend as a Service stellt der Cloud-Anbieter fachliche Rundum-sorglos-Pakete – zum Beispiel User-Management, Social-­Media-Integration oder ein Chatsystem – in Form von Backend-Services zur Verfügung. Mit API oder SDK sind sie in die eigene Anwendung einbindbar und von dort aus ansprechbar. Dabei ist es egal, ob die eigene Anwendung ebenfalls in der Cloud des BaaS-Anbieters, in der Cloud eines anderen Anbieters oder als On-Premises-Lösung im eigenen Rechenzentrum läuft. BaaS erfreut sich insbesondere im Umfeld mobiler Lösungen großer Beliebtheit, da sich durch die geschickte Kombination von angebotenen Backend-Diensten auf ein eigenes Backend verzichten lässt.

Bei Function as a Service, das einige als das „echte“ Serverless ansehen, geht der Cloud-Anbieter noch einen Schritt weiter und bietet voll gemanagte, automatisch skalierbare Laufzeitumgebungen für die individuelle Anwendungslogik an. Der Anwendungsentwickler programmiert nur noch die gewünschte Logik in Form einzelner Funktionen – Serverless Functions (Abbildung 1). Alles Weitere liegt in der Verantwortung des Cloud-Anbieters. Damit die Funktion in der Cloud aufrufbar ist, muss der Entwickler noch ein Event konfigurieren, das die Funktion aktiviert. Ein solches Event kann ein über ein API-Gateway an die Funktion weitergeleiteter REST-Call sein, ein Ereignis innerhalb einer Cloud-Komponente (wie das Hinzufügen eines Bildes in einen vorab definierten Ablageort des Cloud-Storage) oder das Ändern eines Datensatzes innerhalb einer bestimmten Tabelle einer Cloud-­Datenbank. Diese Beispiele zeigen, dass eine Serverless Function selten allein dasteht, sondern als Bindeglied zwischen mehreren Cloud-Komponenten fungiert.

Kommentieren