Serverless Computing und Container sind beides Architekturen, die die Kosten für in der Cloud gehostete Webanwendungen reduzieren, aber sie unterscheiden sich in mehreren wichtigen Punkten. Container sind ressourceneffizienter als virtuelle Maschinen, aber serverlose Bereitstellungen sind noch ressourceneffizienter und einfacher zu skalieren als Container-basierte Architekturen.
Nach Lektüre dieses Artikels können Sie Folgendes:
Link zum Artikel kopieren
Sowohl Serverless Computing als auch Container ermöglichen es Entwicklern, Anwendungen mit weit weniger Kosten und mehr Flexibilität zu erstellen als Anwendungen, die auf traditionellen Servern oder virtuellen Maschinen gehostet werden. Welche Art von Architektur ein Entwickler verwenden sollte, hängt von den Anforderungen der Anwendung ab, aber serverlose Anwendungen sind skalierbarer und in der Regel kostengünstiger.
Ein Container enthält sowohl eine Anwendung als auch alle Elemente, die die Anwendung zur ordnungsgemäßen Ausführung benötigt, einschließlich Systembibliotheken, Systemeinstellungen und andere Abhängigkeiten. Wie eine Pfannkuchenmischung, bei der nur Wasser hinzugefügt wird, brauchen Container nur eines, um ihre Funktion zu erfüllen: Sie müssen gehostet und ausgeführt werden.
Jede Art von Anwendung kann in einem Container ausgeführt werden. Eine containerisierte Anwendung wird immer auf die gleiche Weise ausgeführt, unabhängig davon, wo sie gehostet wird. Container können problemlos bewegt und überall dort eingesetzt werden, wo sie benötigt werden, ähnlich wie physische Transportbehälter, die eine Standardgröße haben und daher unabhängig von ihrem Inhalt mit verschiedenen Transportmitteln (Schiff, LKW, Zug usw.) überall hin verschickt werden können.
Technisch gesehen sind Container eine Möglichkeit, einen Rechner oder einen Server in separate Benutzerbereichsumgebungen zu partitionieren, sodass in jeder Umgebung nur eine Anwendung ausgeführt wird und keine Interaktion mit anderen partitionierten Abschnitten auf dem Rechner erfolgt. Jeder Container teilt sich den Kernel der Maschine mit anderen Containern (der Kernel ist die Grundlage des Betriebssystems und interagiert mit der Hardware des Computers), aber er läuft so, als wäre er das einzige System auf dem Rechner.
Eine virtuelle Maschine ist eine Software, die ein komplettes Computersystem imitiert. Sie ist vom Rest des Rechners, auf dem sie gehostet wird, isoliert und verhält sich so, als wäre sie das einzige Betriebssystem auf ihm und als hätte sie einen eigenen Kernel. Virtuelle Maschinen sind eine weitere gängige Möglichkeit, mehrere Umgebungen auf einem Server zu hosten, sie verbrauchen jedoch viel mehr Rechenleistung als Container.
Serverlose Anwendungen werden in Funktionen aufgeteilt und von einem Drittanbieter gehostet, der dem Anwendungsentwickler nur die Zeit in Rechnung stellt, die für die Ausführung jeder Funktion benötigt wird. Weitere Informationen zum Serverless Computing finden Sie unter Was ist Serverless Computing?
„Serverless“ Computing wird tatsächlich auf Servern ausgeführt, aber es ist Sache des Serverless-Anbieters, Serverplatz so bereitzustellen, wie er von der Anwendung benötigt wird – es werden keine spezifischen Rechner für eine bestimmte Funktion oder Anwendung zugewiesen. Im Unterschied dazu befindet sich jeder Container auf jeweils einem Rechner und verwendet das Betriebssystem dieser Maschine, wobei er auf Wunsch leicht auf einen anderen Rechner verschoben werden kann.
In einer Container-basierten Architektur wird die Anzahl der eingesetzten Container vom Entwickler im Voraus festgelegt. Im Gegensatz dazu skaliert das Backend in einer serverlosen Architektur von Natur aus und automatisch, um den Anforderungen gerecht zu werden.
Um die Versandcontainer-Metapher fortzuführen: Eine Reederei könnte versuchen, einen Anstieg der Nachfrage nach einem bestimmten Produkt vorherzusagen und mehr Container an den Bestimmungsort zu verschiffen, um diese Nachfrage zu befriedigen. Sie könnte aber nicht mit den Fingern schnippen und mehr Container voller Waren produzieren, wenn die Nachfrage die Erwartungen übertreffen sollte.
Serverlose Architektur ist eine Möglichkeit, genau das zu tun. Wenn es um die Rechenleistung geht, ist Serverless Computing wie die Wasserversorgung in einem modernen Haus: Durch das Aufdrehen des Wasserhahns können Verbraucher jederzeit so viel Wasser beziehen und verbrauchen, wie sie benötigen, und sie zahlen nur für das, was sie verbrauchen. Dies ist weitaus skalierbarer als der Versuch, Wasser jeweils in Eimer-Einheiten – oder in Versandcontainer-Einheiten – zu kaufen.
Container laufen ständig, weshalb Cloud-Anbieter den Serverplatz auch dann in Rechnung stellen, wenn zu einem bestimmten Zeitpunkt niemand die Anwendung nutzt.
In einer serverlosen Architektur gibt es keine ständigen Kosten, da der Anwendungscode nur dann läuft, wenn er aufgerufen wird. Stattdessen wird Entwicklern nur die Serverkapazität berechnet, die ihre Anwendung tatsächlich nutzt.
Container werden in der Cloud gehostet, aber die Cloud-Anbieter aktualisieren oder warten sie nicht. Die Entwickler müssen jeden Container, den sie bereitstellen, selbst verwalten und aktualisieren.
Aus der Sicht eines Entwicklers hat eine serverlose Architektur kein Backend, das verwaltet werden muss. Der Anbieter kümmert sich um die Verwaltung und die Software-Updates für die Server, auf denen der Code ausgeführt wird.
Die Einrichtung von Containern dauert anfangs länger als bei serverlosen Funktionen, da Systemeinstellungen, Bibliotheken usw. konfiguriert werden müssen. Nach der Konfiguration dauert die Bereitstellung von Containern nur wenige Sekunden. Da serverlose Funktionen jedoch kleiner als Container-Microservices und nicht mit Systemabhängigkeiten gebündelt sind, benötigen sie nur Millisekunden für ihre Bereitstellung. Serverlose Anwendungen können live sein, sobald der Code hochgeladen ist.
Es ist schwierig, serverlose Webanwendungen zu testen, da sich die Backend-Umgebung in einer lokalen Umgebung nur schwer replizieren lässt. Im Gegensatz dazu laufen Container unabhängig von ihrem Bereitstellungsort immer gleich, sodass es relativ einfach ist, eine Container-basierte Anwendung vor der Bereitstellung in der Produktion zu testen.
Für Cloudflare Workers, das serverlose Architekturen ermöglicht, haben wir eine virtuelle Testumgebung geschaffen, um den Entwicklungsprozess zu verbessern.
Beide sind Cloud-basiert und reduzieren die Infrastrukturkosten erheblich – Serverless Computing noch mehr als Container. Bei beiden Arten von Architekturen werden die Anwendungen zerlegt und als kleinere Komponenten bereitgestellt. In einer Container-basierten Architektur führt jeder Container einen Microservice aus.
Microservices sind Segmente einer Anwendung. Jeder Microservice führt einen Dienst aus, und mehrere integrierte Microservices bilden zusammen die Anwendung. Obwohl der Name nahelegt, dass Microservices winzig klein sind, müssen sie es nicht sein.
Einer der Vorteile der Erstellung einer Anwendung als Sammlung von Microservices besteht darin, dass die Entwickler jeweils einen Microservice aktualisieren können, anstatt die gesamte Anwendung zu aktualisieren, wenn sie Änderungen vornehmen müssen. Das Erstellen einer Anwendung als Sammlung von Funktionen, wie in einer serverlosen Architektur, bietet den gleichen Vorteil, jedoch auf einer granulareren Ebene.
Entwickler, die sich für eine serverlose Architektur entscheiden, können neue Anwendungen schnell freigeben und iterieren, ohne sich Gedanken darüber machen zu müssen, ob die Anwendung skalierbar ist oder nicht. Wenn eine Anwendung keinen konsistenten Traffic oder keine konsistente Nutzung aufweist, ist Serverless Computing zudem kostengünstiger als Container, da der Code nicht ständig ausgeführt werden muss.
Container geben Entwicklern mehr Kontrolle über die Umgebung, in der die Anwendung läuft (was aber mit mehr Wartung verbunden ist) sowie über die verwendeten Sprachen und Bibliotheken. Aus diesem Grund sind Container äußerst nützlich für die Migration von älteren Anwendungen in die Cloud, da es möglich ist, die ursprüngliche Ausführungsumgebung der Anwendung genauer zu replizieren.
Und schließlich ist es möglich, eine hybride Architektur zu verwenden, bei der einige Funktionen serverlos und einige Funktionen in Containern eingesetzt werden. Wenn beispielsweise eine Anwendungsfunktion mehr Speicher benötigt, als vom Serverless-Anbieter zugewiesen wurde, wenn eine Funktion zu groß ist oder wenn bestimmte Funktionen, aber nicht andere, lange ausgeführt werden müssen, können Entwickler mithilfe einer hybriden Architektur die Vorteile von Serverless nutzen und trotzdem Container für die Funktionen zu verwenden, die Serverless nicht unterstützen kann.
Cloudflare ermöglicht Entwicklern, mithilfe von Cloudflare Workers hochleistungsfähige serverlose Anwendungen zu erstellen.