Serverless Computing nimmt Entwicklern und Technikern die Mühe der Bereitstellung und Verwaltung der Infrastruktur ab. Ohne Serverless Computing sieht ein typischer Lebenszyklus für die Entwicklung, Bereitstellung und Verwaltung von Software folgendermaßen aus:
Die Entwickler schreiben den Quellcode.
Das Ops-Team bewertet die Leistungs- und Skalierbarkeitsanforderungen der Anwendung und erstellt einen Vorschlag für einen Infrastrukturplan.
Der Plan wird dem Cloud-Serviceanbieter mitgeteilt, und es wird eine bestimmte Anzahl von Servern gekauft.
Die Anwendung wird eine Woche lang reibungslos ausgeführt, bevor sie aufgrund der hohen Speicherauslastung abstürzt.
Die Entwickler und Ops-Techniker beheben das Problem und kaufen schließlich ein paar zusätzliche Server, um die Last zu verteilen.
Andere Probleme treten immer wieder auf, und die Entwickler verbringen die Hälfte ihrer Arbeitszeit mit der Behebung von Infrastrukturproblemen.
Das Ops-Team steht wegen des Anstiegs der Cloud-Kosten unter ständigem Druck der Finanzabteilung und ist gezwungen, stets nach Optimierungsmöglichkeiten zu suchen.
Bei Serverless Computing ist die Arbeit der Entwickler mit Schritt 1 beendet. Der Cloud-Anbieter verteilt, verwaltet und skaliert die für die Ausführung der Anwendung erforderliche Infrastruktur automatisch. Infrastrukturplanung, die Überwachung des Serverzustands und Besorgnis wegen zu hoher Kosten sind unnötig. Da der Cloud-Anbieter je nach Anwendungsanforderungen automatisch Ressourcen hinzufügt oder entfernt, wird Ihnen nur das in Rechnung gestellt, was Sie wirklich nutzen. Nicht mehr und nicht weniger.
Wichtig ist dabei, dass Serverless nicht bedeutet, dass keine Server verwendet werden. Aber die üblichen Aufgaben, die mit Servern verbunden sind, wie Infrastrukturplanung, Verwaltung und Skalierbarkeit, sind nicht Sache der Entwickler.
In einer Serverless-Umgebung übernimmt der Cloud-Anbieter den Betrieb, sobald die Entwickler die Implementierung der Geschäftslogik abgeschlossen haben. Der Cloud-Anbieter könnte seine Anwendung in einer virtuellen Maschine oder einem Container ausführen; der Entwickler muss davon nichts wissen und sich nicht darum kümmern. Dies hat zur Folge, dass die Anwendung mit einem Minimum an Ressourcen ausgeführt wird und bei Bedarf skaliert werden kann.
Function-as-a-Service (FaaS) ist der Serverless-Ansatz, um Mikroservice-Anwendungen zu erstellen. Mit FaaS können Entwickler ganz nebenbei Code schreiben, der bei bestimmten Ereignissen ausgeführt wird, z. B. wenn ein Benutzer auf eine Schaltfläche in einer Webanwendung klickt, wenn eine neue Nachricht in einer Nachrichtenwarteschlange eingeht oder wenn jemand eine Anfrage an Ihren HTTP-Server sendet.
Die Microservice-Architektur ist ein Implementierungsansatz, mit dem Entwickler ihre Geschäftslogik auf mehrere, lose gekoppelte Services verteilen können. Dies hat mehrere Vorteile:
Kleinere Services sind viel einfacher zu testen und zu pflegen.
Geschäftslogik, die über mehrere Services verteilt ist, hat keinen Single Point of Failure.
Schnellere Bereitstellung.
Sie können sich FaaS als eine Untergruppe von Serverless vorstellen. Serverless deckt in der Regel alle Servicekategorien wie Computing, Datenbanken, API-Gateways und Speicher usw. ab, wobei die Planung, Verwaltung und Abrechnung nicht mehr Sache der Entwickler ist. FaaS hingegen konzentriert sich ausschließlich auf ereignisgesteuertes Computing, bei dem Entwickler den Anwendungscode auf der Grundlage von Ereignissen auslösen können. Ein weiterer wichtiger Vorteil von FaaS besteht darin, dass Sie für die Erstellung Ihrer Anwendung nicht eine einzige Programmiersprache oder ein einziges Framework verwenden müssen. Sie können Ihre logikgesteuerten Funktionen in einer beliebigen Anzahl verschiedener Sprachen oder Frameworks schreiben. Sehen wir uns ein Beispiel an.
In Ihrer Cloud-Umgebung haben Sie Ihre Nachrichtenwarteschlange mit einer Funktion verbunden. Immer wenn eine Nachricht in der Warteschlange eingeht (Ereignis), ruft die Funktion Ihre REST-API auf, die dann Ihre Geschäftslogik ausführt. In ähnlicher Weise können Sie andere Funktionen schreiben, um Ihren Authentifizierungsservice mit Ihrer Datenbank und Ihren E-Mail-Anbieter mit anderen Teilen Ihres Systems zu verbinden.
Serverless und Platform-as-a-Service ähneln sich in dem Sinne, dass bei beiden die Infrastruktur für die Entwickler unsichtbar bleibt und diese sich nur um das Schreiben von Code kümmern müssen. Es gibt jedoch einige Unterschiede.
Bei PaaS müssen die Anwendungen manuell für die Skalierung konfiguriert werden. Serverless dagegen skaliert Anwendungen automatisch je nach Bedarf.
Bei Serverless-Anwendungen wird der Code agil ausgeführt, d. h. nur dann, wenn er aufgerufen wird. Eine Serverless-Anwendung oder -Funktion kann z. B. vollständig heruntergefahren werden, wenn keine Aktivität stattfindet, und dann (in Millisekunden) neu gestartet werden, um auf ein Ereignis zu reagieren. PaaS-Anwendungen lassen sich nicht so schnell skalieren.
Mit PaaS haben Sie mehr Kontrolle über Ihre Infrastruktur und Bereitstellungen. Serverless abstrahiert jedoch so gut wie alles.
Die meisten Softwareanwendungen haben ein Frontend und ein Backend. Das Frontend umfasst in der Regel die Benutzeroberfläche sowie die Client-seitige Logik. Das Frontend einer Webanwendung ist zum Beispiel das, was Sie in Ihrem Browser sehen. Das Backend umfasst alles, was hinter den Kulissen geschieht. Wenn Sie sich anmelden, werden Ihr Benutzername und Ihr Kennwort vom Frontend empfangen, aber zur Überprüfung an den Backend-Server gesendet. Ebenso werden alle bei der Anmeldung erfassten Benutzerinformationen in einer Datenbank gespeichert, die ebenfalls Teil des Backends ist. Der Server, auf dem alle Backend-Entitäten (Authentifizierungsservice, Datenbanken, APIs) ausgeführt werden, ist ebenfalls Teil des Backends.
Backend-as-a-Service (BaaS) nimmt den Entwicklern die Verantwortung für die Entwicklung und Verwaltung des Backends ab. Sie können sich auf das Frontend der Anwendung konzentrieren und es über APIs und SDKs (vorgefertigte Software Development Kits) mit dem Backend verbinden.
BaaS und Serverless sind sich ähnlich, da sie beide das Backend vor den Entwicklern verbergen. Allerdings bietet BaaS nicht die On-Demand-Skalierbarkeit, die Sie mit Serverless erhalten. Außerdem lassen sich BaaS-Anwendungen, genau wie PaaS, nicht so schnell skalieren wie Serverless-Anwendungen.
In der Abbildung unten sehen Sie, dass wir bei einer herkömmlichen Einrichtung wahrscheinlich zwei Server haben, auf denen zwei Anwendungen laufen. Dies ist ein sicherer Ansatz, da wir einzelne Server für Anwendungen bereitgestellt haben. Aber es ist auch etwas verschwenderisch, da die Anwendungen (vermutlich) in 30 % der Zeit keine Anfragen erhalten. Außerdem gibt es keine Möglichkeit, die Anwendungen automatisch zu skalieren, wenn die Last drastisch ansteigt.
Im Gegensatz dazu verfügt die Serverless-Architektur auf der linken Seite nur über zwei Server, auf denen vier Anwendungen ausgeführt werden, da dies nach den aktuellen Anforderungen ausreichend ist. Zu diesem Zeitpunkt besteht keine Notwendigkeit, weitere Server bereitzustellen. Sobald die Plattform jedoch einen Skalierungsbedarf feststellt, wird sie bei Bedarf weitere Server hinzufügen. Sie kann auch einen Server außer Betrieb nehmen, wenn er nicht mehr benötigt wird.
Da Ihre Infrastruktur von Ihrem Cloud-Anbieter definiert, gewartet und skaliert wird, wird auch die Sicherheit überwiegend von ihm gewährleistet. Sie müssen das Betriebssystem nicht mehr abhärten und keine Firewalls implementieren.
Ein weiterer Aspekt des Serverless Computing, der es so sicher und schwer zu hacken macht, ist sein ephemerer Charakter. Serverless-Anwendungen, -Funktionen oder -Container werden je nach Bedarf ausgeführt und gestoppt, was die Gefahr langanhaltender Angriffe deutlich verringert.
Mit Serverless können Sie zu einem Microservice-Ansatz übergehen. Auf diese Weise können Sie Richtlinien pro Service definieren, was bei kleinen Services viel einfacher ist.
Dennoch liegt ein Teil der Verantwortung für die Sicherheit immer noch auf Ihren Schultern. Denken Sie daran:
Ihr Cloud-Anbieter kann die Abhängigkeiten auf Betriebssystemebene für Sie patchen, aber Sie müssen trotzdem sicherstellen, dass Ihre Anwendungsabhängigkeiten gepatcht und aktuell sind.
Wenn Sie Zugriff auf Ihre Server oder Funktionen gewähren, sollten Sie das Least-Privilege-Prinzip anwenden, d. h. Sie sollten einem Benutzer nur die für die Erfüllung seiner Aufgaben erforderlichen Zugriffsrechte gewähren.
Wenn Sie ereignisgesteuerte Funktionen verwenden, stellen Sie sicher, dass Ihre Eingabedaten bereinigt sind, um Einschleusungsangriffe (z. B. SQL-Injection) zu vermeiden
Vergewissern Sie sich zuletzt, dass Ihr Anwendungscode sicher ist, indem Sie die entsprechenden Best Practices für die verwendete(n) Programmiersprache(n) oder Framework(s) anwenden.
Steigerung der Produktivität von Entwicklern, weil sie sich auf das konzentrieren können, worin sie am besten sind: Code schreiben.
Keine formale Infrastrukturplanung erforderlich.
Geringere Kosten durch nutzungsbasierte Zahlung.
Verbesserte und automatisierte Skalierbarkeit.
Kaltstarts (Server, die nach einem Herunterfahren wegen Inaktivität neu gestartet werden) können bei einigen Serverless-Produkten die Leistung beeinträchtigen.
Es ist in der Regel sehr schwierig, Ihre Serverless-Umgebung von einem Anbieter zu einem anderen zu migrieren.
Bei Aufgaben, die langfristig ausgeführt werden, können die Kosten steigen. Serverless ist ideal für Aufgaben, die nicht unbegrenzt ausgeführt werden müssen. Dadurch sinken die Kosten, wenn die Funktion oder Anwendung inaktiv ist.
Für einige Benutzer kann die Lernkurve steil sein. Die Entwicklung von Anwendungen in Serverless-Umgebungen unterscheidet sich grundlegend von traditionellen Ansätzen.
Eine große Sorge, die die meisten Menschen in Bezug auf Serverless haben, sind Kaltstarts. Wie bereits erwähnt, geht eine Anwendung in einer Serverless-Umgebung in den Ruhezustand über, wenn sie eine Zeit lang nicht aufgerufen wurde. Sobald eine neue Anfrage eingeht, wird die Anwendung wieder aktiv. Bei einigen Serverless-Produkten kann diese Startzeit zu einer spürbaren Latenz führen. Die Cloud-Anbieter versuchen jedoch, dieses Problem zu lösen, indem sie die Zeit, die für das Hochfahren einer Anwendung, eines Servers oder einer Funktion benötigt wird, auf ein Minimum reduzieren.
Da Serverless für Unternehmen jeder Art und Größe so viel zu bieten hat, gehen wir davon aus, dass die Verbreitung in den nächsten Jahren zunehmen wird.