Nur wenige Architekturdebatten haben so viele Konferenzvorträge hervorgebracht wie diese. Serverlose Fans sagen, Server sind eine Ablenkung und man sollte nur Geschäftslogik schreiben. Container-Fans sagen, serverlos ist teuer, begrenzt und sperrt dich ein. Beide haben einen Punkt.
Sie sind Werkzeuge für verschiedene Aufgaben, und die Grenze zwischen ihnen ist sehr verschwommen.
Die Optionen
Funktionen als Dienstleistung (FaaS): AWS Lambda, Azure Funktionen, Google Cloud Laufen Funktionen. Sie laden eine Funktion hoch, die Plattform läuft sie aus, wenn ein Ereignis eintrifft (eine HTTP-Anfrage, ein Dateiladload, eine Warteschlange), und Sie zahlen pro Aufruf und Ausführungszeit. Keine Server, keine Container, an die man denken muss.
Serverlose Container: Google Cloud Run, AWS Fargate (mit ECS), Azure Container Apps, AWS App Runner. Das Programm wird auch von den Anwendern von AWS verwendet. Sie stellen ein Container-Bild zur Verfügung, die Plattform läuft und skaliert es, oft bis auf Null. Sie verwalten keine Knoten oder Cluster.
Die Tabelle 1 enthält folgende Angaben:: verwaltet (EKS, AKS, GKE) oder selbst gehostet. Sie führen Container auf einem Cluster, den Sie kontrollieren, mit voller Flexibilität und voller Verantwortung.
Knativ und ähnliche Projekte bringen serverlose Skala-zu-Null- und ereignisgesteuertes Verhalten auf Kubernetes.
Diese bilden ein Spektrum: mehr Kontrolle an einem Ende, weniger operative Arbeit am anderen.
Serverlos bedeutet nicht, dass es keine Server gibt. Das heißt, sie sind jemand anderes Problem, und du bezahlst dafür.
Wo Serverlos glänzt
- Veranstaltungsgesteuerter Klebstoff: Reaktion auf Datei-Uploads, Datenbankänderungen, Webhooks, geplante Aufgaben.
- Spitzen- oder unberechenbarer Verkehr: Null Kosten beim Leerlauf, sofortige Skalierung für Ausbrüche.
- Kleine Teams Die Kommission hat die Kommission aufgefordert,
- Prototypen und neue Produkte, wo die Geschwindigkeit wichtiger ist als die Optimierung.
- Dienstleistungen mit geringer Verkehrslage, wo es vergeudend wäre, für einen immer anliegenden Behälter zu bezahlen.
Wo die Container auf Kubernetes glänzen
- Stetiger, starker Verkehr: Bei ständig hoher Last wird die Bezahlung pro Anfrage teurer als die Bezahling der Kapazität.
- Langfristige Prozesse: Arbeiter, Streaming, WebSockets, alles, was länger läuft als die Zeitlimit einer Funktion.
- Komplexe Systeme mit vielen Dienstleistungen, Service-Meshes, benutzerdefinierte Netzwerke.
- Spezialgeräte: GPUs, hoher Speicher, spezifische Instanztypen.
- Übertragbarkeit über Clouds und On-Premises.
- Teams mit Plattformtechnik Wer Kubernetes gut laufen kann.
Kaltstart und Grenzwerte
Die klassischen Nachteile von Serverlosigkeit:
- Kaltstart: wenn eine Funktion eine Weile nicht ausgeführt wurde, dauert die erste Anfrage länger, während die Plattform eine neue Instanz startet. Normalerweise klein für leichte Laufzeiten, mehr bemerkbar für schwere wie Java mit großen Frameworks. Es gibt Minderungen: Bereitstellung von Gleichzeitigkeit, schnelle Startfunktionen auf Basis von Snapshots, minimale Instanzen auf Cloud Run.
- Fristen: Funktionen haben maximale Ausführungszeiten (z. B. 15 Minuten bei Lambda).
- Ressourcenbeschränkungen: Speicher, CPU, Paketgröße, temporärer Speicher.
- Staatenlosigkeit: kein lokaler Zustand zwischen Aufrufen. Alles geht in den externen Speicher.
- Beobachtbarkeit und Debugging Über viele kleine Funktionen kann schwieriger sein.
- Einbindung: Funktionscode wird oft eng an anbieterspezifische Ereignisse und Dienste gebunden.
Serverlose Container wie Cloud Run erleichtern viele davon: Standardcontainer, längere Anforderungszeiten, Gleichzeitigkeit pro Instanz und viel einfachere Portabilität.
Bei Überschneidungen der Kosten
Die Kosten hängen von der Nutzung ab:
- Niedrig oder starker Gebrauch: Serverlos ist oft dramatisch billiger, weil man nichts zahlt, wenn man nicht arbeitet.
- Moderater Konsum: ungefähr vergleichbar und serverlose Einsparungen bei der Betriebsarbeit.
- Hohe, stetige Nutzung: Container mit reservierter oder Spot-Kapazität gewinnen in der Regel an den Rohinfrastrukturkosten.
Vergiss es nicht. Menschen kosten- Ich weiß . Eine Kubernetes-Plattform braucht Ingenieure, um sie zu betreiben. Für ein kleines Team kann serverlos insgesamt billiger sein, auch wenn die Cloud-Rechnung höher ist.
Beide mischen
Die meisten ausgereiften Architekturen verwenden beides:
- Kern-APIs und langlaufende Dienste auf Kubernetes oder serverlosen Containern.
- Ereignis-Handler, geplante Aufgaben und Klebercode als Funktionen.
- Datenpipelines mit verwalteten serverlosen Diensten (Warteschlangen, Workflows, Stream-Verarbeitung).
Und die Wahl muss nicht dauerhaft sein. Ein Dienst kann auf Cloud Run oder Lambda starten und nach zunehmendem Traffic auf Kubernetes umsteigen, besonders wenn er von Anfang an als Standardcontainer verpackt ist.
Also, welcher?
Mein Standardrat:
- Kleines Team, neues Produkt: Serverlose Container starten, idealerweise Serverlose Contener. Schnell schicken.
- Ereignisorientierte Aufgaben- Funktionen.
- Große, stetige Arbeitslasten, viele Dienste, Plattformteam vor Ort- Ich habe eine Frage.
- Ich weiß es nicht .Wir müssen alles in Container verpacken. Das hält deine Optionen offen.
Mein Vorschlag: Wählen Sie die geringste Infrastruktur, mit der Sie heute davonkommen können, und halten Sie Ihren Code so portabel, dass Sie morgen Ihre Meinung ändern können.
Desly