Als Weiterentwicklung von Infrastructure-as-a-Service-Plattformen für öffentliche Clouds, die die Einrichtung und Wartung von Servern überflüssig machen, gehört Serverless neben Kubernetes zu den am schnellsten wachsenden Ansätzen für die Cloud-Entwicklung. Die Serverless-Architektur basiert auf der Verwendung von Functions-as-a-Service (FaaS) und einem schnell wachsenden Ökosystem von Diensten, die Softwareentwicklungsteams helfen, Anwendungen schneller, zuverlässiger und kostengünstiger zu erstellen und zu warten.
Serverless verspricht, die Cloud-Entwicklung schneller, billiger und zuverlässiger zu machen und Fehlerquellen zu minimieren. Sie baut auf dem Trend auf, das zu optimieren, was ein Entwicklungsteam von Grund auf programmieren und konfigurieren muss, indem es dies auf die Infrastruktur ausweitet.
Der architektonische Ansatz trägt wesentlich dazu bei, das Risiko von Infrastrukturen als Fehlerquelle und Engpass für die Effizienz zu verringern, in vielen Fällen sogar nahezu zu eliminieren. Die Entwickler können sich auf die Anwendung selbst konzentrieren und die Bereitstellung der Infrastruktur dem FaaS-Anbieter überlassen, von denen die drei größten und ausgereiftesten die öffentlichen Cloud-Giganten AWS, Microsoft Azure und Google Cloud Platforms sind.
Serverless bietet Vorteile für eine breite Palette von Anwendungsfällen, von der Verarbeitung großer Datenmengen bis hin zu kurz laufenden Aufgaben und benutzerorientierten Anwendungen, und gewinnt schnell an Zugkraft als strategische Architekturwahl. Die technische Effizienz und das Pay-as-you-go-Geschäftsmodell machen Serverless zu einer attraktiven Option für das gesamte Spektrum, von Start-ups bis hin zu multinationalen Unternehmen.
Laut dem jüngsten Bericht von Slashdata zum Stand der Cloud-nativen Entwicklung („State of Cloud-native Development“), der im Dezember 2021 veröffentlicht wurde, liegt die aktive Nutzung von FaaS und Serverless-Architekturen nur knapp hinter der Nutzung von Container-Orchestrierungstools und Plattformen wie Kubernetes und Docker.
Der Bericht von Slashdata zeigt zwar auch, dass sich die Akzeptanz der Serverless-Architektur in den letzten Jahren verlangsamt hat, doch der State of Serverless-Report von DataDog zeigt, dass Software-Entwicklungsteams, die Serverless eingeführt haben, ihre Nutzung beschleunigen. Lambda-Funktionen von AWS wurden im vergangenen Jahr 3,5 Mal häufiger aufgerufen als zwei Jahre zuvor. Außerdem liefen die Funktionen jeder Organisation durchschnittlich 900 Stunden pro Tag. Rund 50 % der AWS-Benutzer nutzen auch FaaS.
Auch unter Azure- und GCP-Nutzern nimmt die FaaS-Annahme schnell zu. Zwischen 2019 und 2021 steigt der Anteil der Azure-Organisationen, die Azure Functions einsetzen, von 20 % auf 36 %, und mehr als ein Viertel der Organisationen, die Google Cloud nutzen, verwenden jetzt Cloud Functions.
Doch trotz seiner Stärken ist Serverless nicht immer die optimale Architektur für jede Anwendung und jedes Unternehmen. Es eignet sich hervorragend für kurzlebige Aufgaben, und das Pay-as-you-go-Geschäftsmodell von Serverless kann die Cloud-Kosten für solche Lasten massiv senken. Die Kosteneffizienz kann sich jedoch umkehren, wenn die Serverless-Architektur für rechenintensivere Lasten verwendet wird.
Allgemein gesagt, ist die Serverless-Architektur wahrscheinlich nicht die optimale Wahl für Ihre nächste Anwendung, wenn:
Konstante Arbeitslasten – Die Stärke von Serverless ist die Skalierung der Infrastruktur für dynamische Lasten, die im Laufe des Tages Spitzen und Tiefpunkte aufweisen oder stark saisonabhängig sind.
Vermeidung von Anbieterbindung ist strategisch wichtig – die ausgereiftesten Serverless-Plattformen gehören zu den großen Public-Cloud-Anbietern AWS, Azure und GCP und sind untereinander nicht kompatibel. Selbst das Open-Source-Angebot von OpenWhisk ist nicht mit anderen Plattformen kompatibel, obwohl die Hoffnung besteht, dass Serverless irgendwann von der gleichen Art von Community-Standards profitieren wird, wie sie die OCI für Container eingeführt hat.
Erweitertes Monitoring erforderlich – trotz der wachsenden Anzahl von Serverless-Monitoring-Tools, sowohl von Drittanbietern als auch von Serverless-Anbietern, sind die Funktionen noch relativ rudimentär. Die Serverless-Architektur ist im Moment möglicherweise nicht die beste Wahl für Sie, wenn eine robuste Umgebungsüberwachung Priorität hat, auch wenn sich die Tools zweifelsohne verbessern werden.
Lang laufende Funktionen – eine der wichtigsten Einschränkungen von Serverless-Funktionen ist, dass Code-Instanzen nur für eine begrenzte Zeit laufen können – bis zu 15 Minuten für Lambda. Das reicht zwar für die meisten Workloads aus, kann aber den Anforderungen einiger Anwendungen nicht genügen. Längere Arbeitslasten können auf einer Serverless-Plattform im Vergleich zu einem Standard-Cloud-Service auch teurer sein, da das Preismodell für kurzlebige Funktionen ausgelegt ist.
Sie planen die Verwendung von Programmiersprachen, die von Serverless-Plattformen nicht unterstützt werden – Serverless-Plattformen unterstützen nur Code, der in einer Auswahl von Kernprogrammiersprachen geschrieben wurde, was die Wahl der Architektur für Anwendungen, die in anderen Sprachen geschrieben wurden, problematisch macht. APIs, Wrapping und andere Tricks können verwendet werden, um andere Programmiersprachen auszuführen, sind aber in der Regel umständliche Lösungen und sollten vermieden werden.
Java, Go, PowerShell, Node.js, C#, Python, und Ruby
C#, F#, JavaScript, TypeScript, PowerShell, Java, Python
Node. js, Python, Go, Java, . NET, Ruby, und PHP
Nachdem wir uns nun kurz mit den Einschränkungen eines Serverless-Architekturansatzes befasst haben, lassen Sie uns einen genaueren Blick auf seine Stärken werfen und darauf, wann er die richtige Wahl für Ihre nächste App sein könnte.
Nachdem wir uns nun kurz mit den Einschränkungen eines Serverless-Architekturansatzes befasst haben, lassen Sie uns einen genaueren Blick auf seine Stärken werfen und darauf, wann es die richtige Wahl für Ihre nächste App sein könnte.
Serverless lenkt den Fokus weg von der Infrastruktur und hin zum Produkt
Serverless-Technologie bedeutet, dass sich Entwickler nicht mehr um die Infrastruktur kümmern müssen und sich voll und ganz auf das Produkt konzentrieren können.
Probleme, die in der Regel einen erheblichen Entwickleraufwand erfordern, wie Skalierung und Zuverlässigkeit, werden durch die Übernahme der Infrastrukturbereitstellung durch einen Serverless-Anbieter minimiert. Der schnellere und kostengünstigere Softwareentwicklungsprozess, der durch Serverless ermöglicht wird, kann auch die Innovation fördern, indem er die Kosten für Fehlschläge senkt. Es ist kein Servermanagement erforderlich
Obwohl Serverless Computing tatsächlich auf Servern stattfindet, müssen sich die Entwickler nicht um die Server kümmern. Sie werden vom Anbieter verwaltet. Dies kann die notwendigen Investitionen in DevOps reduzieren, was die Kosten senkt, und es gibt den Entwicklern die Möglichkeit, ihre Anwendungen zu erstellen und zu erweitern, ohne durch die Serverkapazität eingeschränkt zu sein.
Optimierung der Cloud-Kosten – Sie zahlen nur für den Serverplatz und die Berechnungen, die Ihre Anwendungen nutzen
Serverless Computing funktioniert nach einem „Pay-as-you-go“-Geschäftsmodell, bei dem nur das berechnet wird, was tatsächlich genutzt wird. Da Funktionen und andere Dienste gestartet und dann gelöscht werden, sobald sie beendet sind, gibt es keine Gemeinkosten. Auch die Bereitstellung erfolgt präzise und wird automatisch nach Bedarf skaliert, wenn die Nutzeraktivität oder die Datenströme Spitzen oder Tiefpunkte erreichen.
Die Servicenutzung kann bis auf 100-Millisekunden-Schritte genau abgerechnet werden.
Automatisierte Skalierbarkeit
Wie bereits erwähnt, besteht eine der wertvollsten Eigenschaften der Serverless-Architektur darin, dass sie sich automatisch skalieren lässt, um den Bedarf reibungslos zu decken, bevor sie wieder heruntergefahren wird. Eine Serverless-Anwendung bewältigt ungewöhnlich hohe Anfragespitzen oder verarbeitet eine einzelne Anfrage eines einzelnen Benutzers auf die gleiche Weise, ohne dass ein manuelles Eingreifen erforderlich ist.
Herkömmlichere Architekturen, selbst solche, die cloudbasiert sind, können bei einem plötzlichen Anstieg der Anfragen überfordert sein.
Schnellere Bereitstellung und Iteration
Die Tatsache, dass beim Start neuer Arbeitsversionen einer Anwendung kein Code auf Server hochgeladen oder Backend- und Infrastrukturkonfigurationen vorgenommen werden müssen, kann die für die Erstellung und Bereitstellung einer neuen Anwendung oder die Iteration aktiver Software erforderliche Zeit erheblich reduzieren.
Da die Serverless-Architektur auf Microservices basiert und kein monolithischer Stack ist, kann der Code entweder auf einmal oder funktionsweise hochgeladen werden. Dies bedeutet auch eine schnellere und einfachere Bereitstellung von Updates wie neuen Funktionen, Patches und Fehlerbehebungen.
Die Nutzung von Edge Computing kann die Latenzzeit verringern
Einer der Nachteile von Serverless ist die Latenz, die sich daraus ergibt, dass Funktionen, die längere Zeit nicht genutzt wurden, „kalt“ gestartet werden, doch der Architekturansatz ermöglicht auch Edge Computing.
Der Code einer Serverless-App kann von überall aus ausgeführt werden, sodass Anbieter Funktionen von Servern ausführen können, die so nah wie möglich am Nutzer stehen. Dies trägt zur Verringerung der Latenzzeit bei, da Anfragen nicht zu einem „Ursprungsserver“ gelangen müssen, der sich am anderen Ende der Welt befinden könnte.
Wenn Sie also ein internationales Publikum haben, sollten Sie die globale Rechenzentrumsinfrastruktur Ihres Serverless-Anbieters in Betracht ziehen. AWS hat von den drei wichtigsten Anbietern die größte geografische Reichweite.
Ein Serverless-Ansatz kann unter den folgenden Umständen eine ernsthafte Überlegung wert sein:
Die Serverless-Architektur wird immer beliebter für Anwendungsfälle wie Analysepipelines und Big Data (Map-Reduktionsprobleme, Hochgeschwindigkeits-Videotranskodierung, Aktienhandelsanalysen und rechenintensive Monte-Carlo-Simulationen für Kreditanwendungen) sowie:
Einige andere, spezifischere Anwendungsfälle sind:
Medien- und Protokollverarbeitung – Serverless-Ansätze schlagen natürliche Parallelität vor. Sie ermöglichen eine einfachere Verarbeitung rechenintensiver Workloads, ohne dass die Entwicklung von Multithreading-Systemen oder die manuelle Skalierung von Rechenflotten erforderlich ist.
IoT-Backends – Ermöglicht das Einbringen jedes unterstützten Codes, z. B. aus nativen Bibliotheken, und vereinfacht so den Entwicklungsprozess von Cloud-basierten Systemen, die gerätespezifische Algorithmen enthalten können.
Benutzerdefinierte Logik und Datenverarbeitung – Wird in On-Premises-Appliances wie AWS Snowball Edge verwendet. Serverless Anwendungen können reibungslos in einer Vielzahl von Umgebungen funktionieren, auch innerhalb von Geräten, da sie die Anwendung selbst von der Ausführungsumgebung entkoppeln.
Die Implementierung einer Serverless-Architektur bedeutet nicht, dass es keinen Platz für DevOps gibt. Es besteht immer noch ein Bedarf an Überwachung, Bereitstellung, Sicherheit, Vernetzung, Support und Debugging. Der DevOps-Betrieb wird oft auf das gesamte Team verteilt und nicht von einem dedizierten DevOps-Ingenieur durchgeführt, aber ein DevOps-Ansatz und eine DevOps-Kultur können die Entwicklung von Serverless-Apps dennoch enorm fördern.
Wie zu Beginn dieses Artikels erwähnt, bringt die Serverless-Architektur zwar viele Vorteile und Effizienzgewinne für den Softwareentwicklungs-Lebenszyklus (SDLC) mit sich, aber kein einzelner Architekturansatz, kein einzelnes Tool und keine einzelne Technologie stellt in jedem Kontext eine einzige Verbesserung gegenüber Alternativen dar. Es gibt immer Anwendungsfälle, die die Stärken ausspielen oder die Grenzen alternativer Technologien aufzeigen, die sich in ihrer potenziellen Anwendung überschneiden können, aber auch wesentliche Unterschiede aufweisen.
Dies sind einige der am häufigsten dokumentierten Einschränkungen der Serverless-Architektur:
Jede Diskussion über die Nachteile eines Serverless-Ansatzes berührt unweigerlich die Unzulänglichkeiten im Bereich der erweiterten Beobachtbarkeit und Überwachung. Es gibt zwar Monitoring-Tools, die sowohl von Serverless-Plattformen als auch von Drittanbietern bereitgestellt werden, aber sie bieten in der Regel nur begrenzte Funktionen und nicht den gleichen Einblick wie bei der standardmäßigen Cloud-nativen und Container-basierten Entwicklung.
Das liegt zum großen Teil daran, dass Serverless-Architekturen nicht dasselbe Maß an Überwachung und Beobachtbarkeit erfordern, da die Infrastruktur vom Anbieter verwaltet wird. Dennoch ist die Überwachung oft wichtig für die Sicherheit und die Fehlerbehebung. Serverless-Architekturen sind eine Sammlung von einer oder mehreren kurzlebigen und isolierten Funktionen. Diese verteilte Natur trägt zu einer besseren Skalierbarkeit und Effizienz bei, erschwert aber auch die Bereitstellung von Ereignisdaten-Analyseplattformen, die Anwendungsprotokolle erfassen und darstellen.
Das Serverless-Monitoring wird jedoch dank neuer Tools und der Weiterentwicklung bestehender Lösungen immer besser und dürfte sich in den kommenden Jahren weiter positiv entwickeln. Einige Monitoring- und Logging-Plattformen haben sich bereits in kurzer Zeit massiv verbessert. In der Zwischenzeit ist es besser, auf dem Laufenden zu bleiben. Serverless-Funktionen sind zustandslos, was in vielen Fällen das Debugging erschwert.
Wenn Serverless als Architekturwahl in Betracht gezogen wird, sollte das Problem der „Kaltstarts“ berücksichtigt werden. Der Begriff bezieht sich auf die längere Zeit, die benötigt wird, um eine ruhende Funktion, die einige Zeit nicht verwendet wurde, wieder zu aktivieren. Entwickler können die Latenz, die durch Kaltstarts entstehen kann, umgehen, indem sie Funktionen „warm“ halten. Dies ist möglich, wenn man sie in regelmäßigen Abständen aufruft. Beachten Sie jedoch, dass dies nur für kleinere Funktionen oder Arbeitsabläufe funktioniert, die recht einfach sind.
Kleinere Anwendungen, die auf effizientem Code basieren, verringern ebenfalls die Kaltstartzeiten, ebenso wie die Wahl schnellerer Programmiersprachen wie Python oder Go. Und wie bereits erwähnt, können Serverless-Anwendungen auch Edge Computing nutzen, um die Latenzzeit zu minimieren.
Die verschiedenen Serverless-Anbieter weisen unterschiedliche Leistungen auf, wenn es um die Reduzierung der Kaltstartzeiten geht, wobei AWS in der vergleichenden Analyse an der Spitze liegt und Azure mit einigem Abstand hinterherhinkt.
Quelle: Mikhail Shilkov
FaaS-Funktionen sind in der Regel durch eine maximal zulässige Dauer jedes Aufrufs begrenzt. Im Falle von AWS beträgt diese 15 Minuten. Die maximale Dauer von Azure Functions hängt vom gewählten Zahlungsplan ab und ist beim Consumption-Plan auf 10 Minuten begrenzt. Nutzer des Premium-Tarifs können jedoch die Vorteile der Standardausführungsdauer von bis zu 30 Minuten nutzen, um unkontrollierte Ausführungen zu verhindern, und sie können auch die host.json-Konfiguration ändern, um die Dauer unbegrenzt zu machen. Und Google Cloud Functions haben eine maximale Laufzeit von 9 Minuten.
Vor ein paar Jahren betrug die maximale Laufzeit von Funktionen bei allen wichtigen Serverless-Anbietern 5 Minuten. Das reichte für die große Mehrheit der Anforderungen aus, konnte aber gelegentlich ein Hindernis für bestimmte Anwendungen sein. Die aktuellen maximalen Laufzeiten bedeuten, dass ihre erweiterten Beschränkungen nur noch selten ein Hindernis darstellen, aber immer noch in Betracht gezogen werden sollten, wenn es um Aufgaben mit besonders langen Laufzeiten geht. Die Verwendung von Serverless für Aufgaben mit langen Laufzeiten kann auch teuer werden und die übliche Kosteneffizienz des Ansatzes ins Gegenteil verkehren.
Viele Aufgaben mit langer Laufzeit können in eine Reihe kleinerer, koordinierter Microservices aufgeteilt werden, die sich besser für FaaS-Funktionen eignen, aber das ist nicht immer eine praktikable Vorgehensweise.
Die schlechte Nachricht ist, dass das JSON-Parsing in einer Serverless-Umgebung ziemlich kompliziert sein kann. Die gute Nachricht ist, dass die AWS-Services Lambda die Ereignis-Nutzdaten in einer definierten Struktur pro Service zur Verfügung stellen. Wenn die Verarbeitungsmeldungen in die JSON-Nutzlast selbst eingebettet sind, müssen Sie lediglich JSON-Schema-Validierungstools untersuchen. Überprüfen Sie anschließend die Datentypen der Attribute in JSON nach der Validierung. Und wenn Sie binäre Objekte verarbeiten, sollten Sie Pakete untersuchen, mit denen Sie den Inhalt überprüfen oder testen können.
Die CD-Pipeline sollte als Code erfasst werden und versionskontrolliert sein. Builds sollten replizierbar sein. Abhängigkeiten, einschließlich vorübergehender Abhängigkeiten, sollten auf exakte Versionen festgelegt werden. Wenn es sich um eine Minor/Patch-Version handelt, können sich zwischen den Builds Aktualisierungen einschleichen, so dass der Build nicht reproduziert werden kann.
In den letzten Jahren sind zahlreiche neue Stack-Anbieter in den Serverless-Bereich eingestiegen. Auch wenn die Funktionalität, die sie oft bieten, für bestimmte Anwendungsfälle großartig sein kann, können sie nicht die gleiche Bandbreite an Diensten anbieten wie die Giganten von AWS, Microsoft Azure und Google Cloud Platforms.
Amazon Web Services (AWS) ist der Marktführer im Bereich Cloud Computing und bietet die größte Auswahl an unterstützenden Tools und Ressourcen.
Ein großes Plus bei der Implementierung von AWS Lambda ist die umfassende und gut geschriebene Dokumentation, die das Ergebnis der relativen Reife der FaaS-Plattform im Vergleich zu anderen Anbietern ist.
Lambda hat durch den Erfolg einiger seiner hochkarätigen Kunden wie Netflix, Thomson Reuters, Vogue und The Guardian an Glaubwürdigkeit und Bekanntheit gewonnen. Eine weitere Stärke ist der „demokratische“ Ansatz bei seinem Standardpreismodell, das bis zu einer Million Anfragen und 400 Terabyte-Sekunden Rechenzeit pro Monat erlaubt. Das ist mehr als ausreichend, um alle Vor- und Nachteile im Zusammenhang mit den eigenen Bedürfnissen abzuwägen, ohne von einer hohen Rechnung getroffen zu werden.
Microsoft baut die Azure-Funktionssuite (sowie seinen Kundenstamm) rasch aus und liefert sich mit AWS ein Kopf-an-Kopf-Rennen um den Marktanteil von Serverless. Die unterstützten Ressourcen entsprechen ziemlich genau dem, was AWS bietet, aber Azure bietet auch einige zusätzliche Funktionen, die speziell für .NET- und Typescript-Entwickler gedacht sind.
Microsoft kümmert sich um seine Entwicklergemeinschaft, indem es alle seine Produkte sorgfältig dokumentiert und die Voraussetzungen für weitere Verbesserungen schafft. Auch das attraktive Preismodell von Azure sorgt für ein stetiges Wachstum der Community. Azure bietet Preispläne an, die anfangs bei weitem die niedrigsten unter den großen Anbietern sind, wenn man die Angebote für dieselbe Arbeitslast vergleicht. Aber Vorsicht! Das Einführungspreisangebot gilt nur für zwei Jahre, danach wird Azure deutlich teurer.
Wenn Sie sich zwischen den beiden großen Anbietern (AWS und Azure) entscheiden, werden Sie höchstwahrscheinlich denjenigen wählen, der die komfortabelste Umgebung und die beste Unterstützung für die Technologien bietet, die Sie voraussichtlich auf dem Stack anwenden werden.
Es war nur zu erwarten, dass Google im Wettbewerb mit AWS und Azure seinen Hut in den Ring für den Serverless-Markt werfen würde. Googles Cloud Functions bietet im Vergleich zu den beiden anderen nichts Einzigartiges, aber einige der angebotenen Funktionen sind dennoch erwähnenswert.
Die Liebe zum Detail, die der Dokumentation gewidmet wurde, zeigt, dass Google erhebliche Anstrengungen unternommen hat, um sie gründlich, leicht verständlich und einfach zu navigieren zu gestalten.
Das Preismodell für Google Cloud Functions unterscheidet sich geringfügig von dem von AWS und Azure – Googles kostenlose Stufe erlaubt 2 Millionen Aufrufe pro Monat, darüber hinaus wird eine Gebühr von 0,0000004 $ pro Aufruf erhoben.
Die Entscheidung, Legacy-Anwendungen auf eine Serverless-Architektur zu migrieren oder Serverless Computing für neue Projekte einzusetzen, sollte gut überlegt sein. Um von einem Serverless-Ansatz zu profitieren, müssen Sie genau verstehen, warum Ihr Projekt diesen Ansatz benötigt, wie er implementiert wird und mit welchen Nachteilen Sie möglicherweise zu kämpfen haben.
Das K&C-Team hat viel Erfahrung mit Serverless-Architekturen. Wenn Sie sich nicht sicher sind, ob Serverless der richtige Ansatz für Sie ist, dann rufen Sie uns an und wir geben Ihnen gerne eine aufschlussreiche Einschätzung der Kompatibilität mit Ihren individuellen Bedürfnissen oder helfen Ihnen, Ihr nächstes Projekt von Anfang bis Ende zu entwickeln!
K&C - Wir schaffen innovative Tech-Lösungen seit über 20 Jahren.
Kontaktieren Sie uns, um Ihre individuellen Bedürfnisse oder Ihr nächstes Projekt zu diskutieren.