Be Software Architecture Wise
Be Wise Apps

Read in English · Leer en español · Lire en français

Abschnitt 0.7 von 0.8 · Einsteiger · 18 Min. Lesezeit

Server, Betriebssysteme, virtuelle Maschinen, Container und Cloud-Dienste

Videolektion

5 Min. · auf Englisch gesprochen, mit Untertiteln
Nur anhören (Audio)
Transkript lesen

Jede App, die Sie nutzen, läuft irgendwo: auf einem Server, in einem Rechenzentrum und immer öfter in der Cloud. Die meisten Organisationen mieten heute Rechenleistung, statt eigene zu kaufen, so wie Haushalte Strom aus dem Netz beziehen, statt einen Generator zu betreiben.

Ein Server ist einfach ein Computer, dessen Aufgabe es ist, auf Anfragen zu warten und sie zu beantworten. Das Wort beschreibt eine Rolle, keine besondere Art von Maschine. Server-Hardware hat dieselben Teile wie jeder Computer, ist aber dafür gebaut, jahrelang zu laufen: viele Prozessorkerne, Reserve-Netzteile und -Festplatten und gar kein Bildschirm und keine Tastatur. Server stehen in Rechenzentren: Gebäuden voller Racks, mit Kühlung, Notstrom aus Batterien und Generatoren und strengen Sicherheitsvorkehrungen. Eigene zu betreiben heißt, Maschinen Monate vor dem Bedarf zu kaufen, zu schätzen, wie viele, und für sie zu zahlen, ob sie ausgelastet sind oder nicht. Genau dieses Problem wollte die Cloud lösen.

Ein Server mit nur einer Anwendung ist größtenteils untätig. Eine virtuelle Maschine, kurz VM, lässt eine physische Maschine so tun, als wäre sie mehrere. Eine Softwareschicht namens Hypervisor teilt die echte Hardware unter den virtuellen Maschinen auf und hält sie getrennt, sodass ein Absturz oder Angriff in einer die anderen nicht erreicht. Jede virtuelle Maschine führt ein eigenes vollständiges Betriebssystem aus, den sogenannten Gast. Das ergibt eine starke Isolation, aber jede braucht Gigabytes und Minuten zum Starten. Ein Container verpackt eine Anwendung mit allem, was sie braucht, etwa ihren Bibliotheken und Einstellungen, sodass sie auf einem Laptop und in der Cloud gleich läuft. Damit hat sich die alte Ausrede erledigt: Bei mir funktioniert es. Container teilen sich den Betriebssystem-Kernel des Hosts, deshalb brauchen sie nur Megabytes und starten in Sekunden. Der Preis ist eine schwächere Isolation, weshalb Cloud-Anbieter Container häufig innerhalb virtueller Maschinen betreiben.

Cloud-Computing heißt, Rechenleistung über das Internet bei Bedarf von einem Anbieter zu mieten, der riesige Rechenzentren betreibt. Amazon Web Services, Microsoft Azure und Google Cloud sind die größten. Ressourcen legen Sie selbst an, binnen Minuten. Viele Kunden teilen sich die Hardware des Anbieters. Die Kapazität wächst und schrumpft rasch, und Sie zahlen für das, was Sie nutzen. Ein Start-up kann für einen Nachmittag hundert Server mieten und sie dann zurückgeben. Es gibt aber ein neues Risiko: Kosten, die unbemerkt wachsen, weil nichts jemanden daran hindert, Ressourcen anzulegen und sie zu vergessen.

Cloud-Dienste unterscheiden sich darin, wie viel der Anbieter für Sie verwaltet. Denken Sie an Pizza: selbst machen, eine fertige aufbacken, liefern lassen oder essen gehen. Bei Infrastructure as a Service mieten Sie virtuelle Maschinen und kümmern sich weiterhin um das Betriebssystem und alles darüber. Bei Platform as a Service liefern Sie nur Ihren Code und Ihre Daten. Die Plattform kümmert sich um Server, Patches und Skalierung. Serverless heißt nicht, dass es keine Server gibt; Sie sehen sie nur nie. Sie laden Funktionen hoch und zahlen pro Aufruf. Das ist günstig bei sprunghaftem Verkehr, aber der erste Aufruf nach einer ruhigen Phase kann langsam sein. Und Software as a Service ist fertige Software, die Sie einfach nutzen. Wofür Sie sich auch entscheiden, für Ihre eigenen Daten, Zugriffe und Einstellungen bleiben Sie immer selbst verantwortlich.

Anbieter gruppieren ihre Rechenzentren nach Geografie. Eine Region ist ein Gebiet, etwa Irland oder Frankfurt. Darin liegen mehrere Availability Zones: physisch getrennte Rechenzentren mit eigener Stromversorgung, Kühlung und eigenem Netzwerk. Hier verteilt ein Load Balancer die Anfragen der Nutzer auf Kopien der Anwendung in zwei Zonen. Die Hauptdatenbank in Zone eins hält eine Standby-Kopie in Zone zwei. Legt ein Brand oder Stromausfall eine Zone lahm, läuft der Dienst weiter. Und ein Content Delivery Network hält Kopien von Bildern, Skripten und Videos an Standorten nahe den Nutzern, sodass Seiten schneller laden und die Server weit weniger Anfragen bearbeiten.

Setzen wir das zusammen. Eine kleine Theaterkette verkauft Tickets online. Die meiste Zeit der Woche ist wenig los, aber wenn der Vorverkauf für eine beliebte Vorstellung beginnt, kommen innerhalb von Minuten zehnmal so viele Menschen. Eine gemietete virtuelle Maschine ist einfach und günstig. Aber am Vorverkaufstag ist sie überlastet, und wenn sie ausfällt, ist die Seite offline. Eine größere Maschine nennt man vertikale Skalierung. Sie erfordert keine Codeänderung, aber das Theater zahlt die ganze Woche für die große Maschine, um ein paar geschäftige Stunden abzudecken. Horizontale Skalierung heißt mehr Kopien hinter einem Load Balancer. Die Plattform fügt am Vorverkaufstag Kopien hinzu und entfernt sie danach wieder. Aber die Software muss dafür ausgelegt sein: Die nächste Anfrage eines Nutzers kann bei einer anderen Kopie landen. Zum Schluss eine verwaltete Datenbank mit einem Standby in einer anderen Zone und ein Content Delivery Network für die Fotos. Das kostet in der Einrichtung mehr, übersteht aber sowohl eine Lastspitze als auch den Verlust eines Rechenzentrums.

Wo Software läuft, ist heute eine Architekturentscheidung, die Kosten, Release-Tempo und das Verhalten bei Ausfällen prägt. Der vollständige Abschnitt bietet noch viel mehr. Als Nächstes sehen wir uns in Abschnitt null Punkt acht an, wie Software entsteht.

Was Sie wissen müssen

Ein Server ist einfach ein Computer, der dient

Ein Server ist ein Computer, dessen Aufgabe es ist, auf Anfragen zu warten und sie zu beantworten: Webseiten, API-Aufrufe, Datenbankabfragen, Dateien. Das Wort beschreibt eine Rolle, keine besondere Art von Maschine. Ein Laptop, auf dem eine kleine Webanwendung läuft, ist ein Server, solange er Anfragen beantwortet; ein Rack-Server in einem Rechenzentrum ist ein Server, weil er nie etwas anderes tut. Dasselbe Wort steht auch für das Programm, das die Anfragen bedient (ein „Webserver“ wie nginx), daher kommt es auf den Zusammenhang an.

Server-Hardware hat dieselben Bestandteile wie jeder Computer (siehe Was Software ist): Prozessoren, Arbeitsspeicher, Massenspeicher und Netzwerkkarten. Der Unterschied liegt in der Gewichtung. Server haben meist viele Prozessorkerne, viel Arbeitsspeicher, redundante Netzteile und Festplatten, damit ein defektes Teil die Maschine nicht stoppt, eine Fernwartung, damit niemand im Raum sein muss, und überhaupt keinen Bildschirm und keine Tastatur. Sie sind dafür gebaut, jahrelang ohne Ausschalten zu laufen.

Die meisten Server im Internet laufen unter Linux oder einem anderen Unix-artigen Betriebssystem; Windows Server ist in Organisationen verbreitet, die auf Microsoft-Produkte setzen. Ein Server-Betriebssystem erledigt dieselben Aufgaben wie das auf Ihrem Laptop (Prozesse ausführen, Arbeitsspeicher und Dateien verwalten, mit dem Netzwerk kommunizieren), wird aber meist über eine Textkommandozeile per Fernverbindung administriert und ist so konfiguriert, dass es sich automatisch statt von Hand neu aufbauen lässt.

Rechenzentren: wo die Server wohnen

Server stehen in einem Rechenzentrum: einem Gebäude, das um ihre Bedürfnisse herum entworfen ist. Tausende Maschinen sitzen in Racks und werden mit Luft oder Flüssigkeit gekühlt, weil sie fast ihren gesamten Strom in Wärme umwandeln. Der Strom kommt über mehr als eine Zuleitung, abgesichert durch Batterien für die ersten Sekunden eines Ausfalls und danach durch Dieselgeneratoren. Netzwerkverbindungen kommen von mehreren Anbietern. Für die Türen braucht man Ausweise und oft auch Fingerabdrücke.

Eine Organisation kann ein eigenes Rechenzentrum betreiben oder Rack-Fläche in einem fremden mieten (Colocation genannt), und vor etwa 2006 war das fast die einzige Wahl. Server selbst zu betreiben (On-Premises) bedeutet, Maschinen Monate vor dem Bedarf zu kaufen, zu schätzen, wie viele, für sie zu bezahlen, ob sie ausgelastet sind oder nicht, und Leute zu beschäftigen, die nachts defekte Festplatten tauschen. Diese Kosten und diese Unbeweglichkeit sind das Problem, das die Cloud lösen wollte.

Virtuelle Maschinen: viele Computer in einem

Ein typischer Server ist größtenteils untätig, wenn er nur eine Anwendung ausführt. Eine virtuelle Maschine (VM) lässt eine physische Maschine so tun, als wäre sie mehrere. Jede VM hält sich für einen vollständigen Computer mit eigenen Prozessoren, eigenem Arbeitsspeicher, eigener Festplatte und Netzwerkkarte und führt ein eigenes Betriebssystem aus, den sogenannten Gast. Eine Softwareschicht namens Hypervisor teilt die echte Hardware unter den VMs auf und hält sie voneinander getrennt, sodass ein Absturz oder Angriff in einer die anderen nicht erreicht. Manche Hypervisoren laufen direkt auf der Hardware (VMware ESXi, Microsoft Hyper-V, KVM, das Teil von Linux ist); andere laufen als Anwendung auf einem normalen Betriebssystem (VirtualBox).

Die Virtualisierung hat die Wirtschaftlichkeit von Servern verändert. Eine Maschine lässt sich mit VMs verschiedener Teams oder Kunden füllen. Eine VM ist eine Menge von Dateien, daher kann sie kopiert, gesichert, auf eine andere Maschine verschoben und in Minuten angelegt werden, statt bestellt und geliefert zu werden. Beachten Sie, dass „virtuelle Maschine“ hier anders gemeint ist als bei den Sprach-VMs wie der Java Virtual Machine, die in Was Software ist erwähnt wird: Jene führen Programme aus, diese bilden ganze Computer nach.

Container: die Anwendung mit allem ausliefern, was sie braucht

Jeder Entwickler kennt den Satz „Bei mir funktioniert es“. Das Programm hängt von einer bestimmten Sprachversion, bestimmten Bibliotheken und bestimmten Einstellungen ab, und auf dem Server sind sie leicht anders. Ein Container löst das, indem er eine Anwendung zusammen mit allem, was sie zum Laufen braucht (ihrer Laufzeitumgebung, ihren Bibliotheken, ihrer Konfiguration), in eine Standardeinheit verpackt, die auf einem Laptop, einem Testserver oder in der Cloud gleich läuft. Der Name kommt von Schiffscontainern: genormten Kisten, die jeder Kran, jedes Schiff und jeder Lkw handhaben kann, ohne zu wissen, was darin ist.

Das Paket ist ein Container-Image: eine schreibgeschützte, versionierte Datei, gebaut nach einem kurzen Rezept (bei Docker ein Dockerfile). Eine laufende Kopie eines Images ist ein Container. Docker, 2013 veröffentlicht, machte das für Entwicklungsteams im Alltag praktikabel, und sein Image-Format ist heute ein offener Standard, den die Open Container Initiative pflegt, sodass andere Werkzeuge dieselben Images bauen und ausführen können.

Der entscheidende Unterschied zu einer VM ist, was geteilt wird. Eine VM bildet Hardware nach und führt ein ganzes Gastbetriebssystem aus. Ein Container ist ein isolierter Prozess: Er teilt sich den Kernel des Host-Betriebssystems (den Kern des Betriebssystems, der Hardware, Arbeitsspeicher und Prozesse steuert) mit anderen Containern, und die Isolationsfunktionen des Kernels geben ihm eine eigene Sicht auf Dateien, Prozesse und Netzwerk. Container starten daher in Sekunden oder schneller und belegen Megabytes statt Gigabytes, sodass Dutzende dort laufen können, wo nur wenige VMs Platz hätten. Der Preis ist eine schwächere Isolation, weil jeder Container von dem einen gemeinsamen Kernel abhängt; deshalb betreiben Cloud-Anbieter die Container ihrer Kunden häufig innerhalb von VMs und kombinieren so beides.

Virtuelle Maschinen und Container im Vergleich

VMs tragen je ein vollständiges Gastbetriebssystem auf einem Hypervisor; Container teilen sich über eine Container-Runtime den Kernel des HostsVirt. MaschinenContainerApp AApp BApp CBibliothekBibliothekBibliothekGast-OSGast-OSGast-OSHypervisorHost-OS (oder keins: Bare-Metal-Hypervisor)Physische Server-HardwareApp AApp BApp CBibliothekBibliothekBibliothekContainer-RuntimeHost-OS mit einem geteilten KernelPhysischer Server/VMkein Gast-OS pro ContainerJede VM bootet eigenes OS:starke Isolation, Gigabytes, MinutenContainer sind isolierte Prozesse:leichter, Megabytes, Sekunden
VMs virtualisieren die Hardware, und jede trägt ein Betriebssystem; Container virtualisieren das Betriebssystem und teilen sich seinen Kernel.
# Start from an image that already has Python installed
FROM python:3.12-slim
WORKDIR /app
# Bake the libraries into the image
COPY requirements.txt .
RUN pip install -r requirements.txt
# Add the application code
COPY . .
EXPOSE 8000
CMD ["python", "-m", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Ein vollständiges Dockerfile für eine kleine Python-Web-API. Der Befehl docker build macht aus diesem Rezept ein Image.

Einen Container auszuführen ist einfach. Hunderte auf Dutzenden Maschinen zu betreiben, abgestürzte neu zu starten, bei steigendem Verkehr Kopien hinzuzufügen und neue Versionen ohne Ausfallzeit auszurollen ist es nicht. Diese Aufgabe übernimmt ein Orchestrator, von denen Kubernetes der bekannteste ist; er wird in Container und Orchestrierung behandelt.

Die Cloud: Rechenleistung minutenweise mieten

Cloud-Computing bedeutet, Rechenressourcen über das Internet bei Bedarf von einem Anbieter zu mieten, der riesige Rechenzentren betreibt: Amazon Web Services (AWS), Microsoft Azure und Google Cloud sind die größten, daneben gibt es viele weitere. Das US National Institute of Standards and Technology (NIST) veröffentlichte 2011 die meistzitierte Definition, die Special Publication 800-145. Sie nennt fünf wesentliche Merkmale: Selbstbedienung nach Bedarf (Sie legen Ressourcen selbst an, über eine Website oder eine API, ohne irgendwo anzurufen), breiter Netzwerkzugang, Ressourcenbündelung (viele Kunden teilen sich die Hardware des Anbieters), schnelle Elastizität (die Kapazität wächst und schrumpft rasch) und gemessene Dienstleistung (Sie zahlen für das, was Sie nutzen).

Die Analogie ist der Strom. Fabriken betrieben einst eigene Generatoren; heute hängen sie am Netz und zahlen pro Kilowattstunde. Mit der Cloud kann ein Start-up für einen Nachmittag hundert Server mieten, um einen Launch zu testen, und hört auf zu zahlen, sobald es sie zurückgibt. Das ist Pay-as-you-go-Abrechnung. Sie macht aus einer großen Anfangsinvestition laufende Kosten und belohnt Systeme, die Kapazität abschalten können, wenn sie nicht gebraucht wird. Sie schafft aber auch ein neues Risiko: Kosten, die unbemerkt wachsen, weil nichts jemanden daran hindert, Ressourcen anzulegen und sie zu vergessen.

IaaS, PaaS, SaaS und Serverless: Wie viel verwalten Sie selbst?

Cloud-Dienste unterscheiden sich vor allem darin, wie viel vom Stack der Anbieter für Sie verwaltet. NIST definierte drei Servicemodelle; ein viertes, Serverless, wurde populär, nachdem AWS 2014 seinen Dienst Lambda gestartet hatte. Eine beliebte Eselsbrücke ist Pizza: Sie können sie zu Hause machen, eine fertige zum Aufbacken kaufen, eine liefern lassen oder essen gehen. Jeder Schritt gibt mehr Arbeit an jemand anderen ab und nimmt Ihnen einige Wahlmöglichkeiten.

Cloud-Servicemodelle im Vergleich

ModellSie verwaltenDer Anbieter verwaltetBeispielePizza-Analogie
On-PremisesAlles: Gebäude, Hardware, OS, Laufzeitumgebung, Anwendung, DatenNichtsEigene Server im eigenen RechenzentrumZu Hause von Grund auf selbst gemacht
IaaS (Infrastructure as a Service)Betriebssystem, Laufzeitumgebung, Anwendung, DatenHardware, Virtualisierung, Netzwerk, GebäudeAmazon EC2, Azure Virtual Machines, Google Compute EngineZum Aufbacken: Sie backen sie im eigenen Ofen
PaaS (Platform as a Service)Anwendungscode und DatenAlles darunter, einschließlich OS-Patches und SkalierungHeroku, Azure App Service, Google App EngineLieferung: Sie stellen Tisch und Getränke
Serverless / FaaS (Function as a Service)Einzelne Funktionen, ausgelöst durch EreignisseAlle Server, Skalierung auf null im Leerlauf, Abrechnung pro AufrufAWS Lambda, Azure Functions, Google Cloud Run functionsPizza stückweise, bezahlt pro Bissen
SaaS (Software as a Service)Ihre Daten, Ihre Nutzer und deren EinstellungenDie gesamte AnwendungMicrosoft 365, Gmail, SalesforceEssen im Restaurant

„Serverless“ heißt nicht, dass es keine Server gibt; es heißt, dass Sie sie nie sehen oder verwalten. Sie laden eine Funktion hoch, legen fest, welche Ereignisse sie auslösen (eine HTTP-Anfrage, eine eintreffende Datei, eine Nachricht in einer Queue), und der Anbieter führt so viele Kopien aus wie nötig und rechnet pro Ausführung und pro Millisekunde ab. Das ist günstig bei sprunghaftem oder geringem Verkehr und erfordert fast keinen Betriebsaufwand. Die Kosten zeigen sich an anderer Stelle: Der erste Aufruf nach einer ruhigen Phase kann langsam sein, während der Anbieter die Funktion startet (ein Kaltstart), es gibt Grenzen dafür, wie lange eine Funktion laufen darf, und bei gleichmäßig hohem Verkehr können die Kosten die eines einfachen Servers übersteigen. Kapitel 6 behandelt Serverless-Architekturen ausführlich.

Zwischen diesen Modellen liegen die Managed Services: Datenbanken, Message Queues, Caches, Objektspeicher, Suchmaschinen und vieles mehr, die der Anbieter installiert, betreibt, patcht, sichert und skaliert. Eine verwaltete Datenbank zu nutzen, statt selbst eine auf einer VM zu installieren, verlagert viel Betriebsarbeit zum Anbieter. Die Abwägung, behandelt in FinOps und Lock-in, besteht darin, dass ein System umso schwerer umzuziehen ist, je mehr anbieterspezifische Dienste es nutzt.

Regionen, Availability Zones und Content Delivery Networks

Cloud-Anbieter gruppieren ihre Rechenzentren nach Geografie. Eine Region ist ein geografisches Gebiet (etwa Irland, Frankfurt oder Virginia) mit einer eigenen, getrennten Gruppe von Rechenzentren, isoliert von anderen Regionen. Jede Region ist in mehrere Availability Zones unterteilt: physisch getrennte Gruppen aus einem oder mehreren Rechenzentren, jede mit unabhängiger Stromversorgung, Kühlung und Vernetzung, typischerweise Kilometer voneinander entfernt, aber nah genug für schnelle Verbindungen untereinander. Ein Brand, ein Hochwasser oder ein Stromausfall sollte höchstens eine Zone lahmlegen.

Das gibt Architekten eine Auswahl an Schutzstufen. Kopien einer Anwendung in zwei oder drei Zonen einer Region zu betreiben übersteht den Verlust eines Rechenzentrums bei kaum zusätzlicher Latenz; der Betrieb in zwei Regionen übersteht den Verlust einer ganzen Region, macht es aber viel schwieriger, die Daten synchron zu halten. Regionen sind auch für Recht und Latenz wichtig: Datenschutzvorschriften können verlangen, dass personenbezogene Daten in einem bestimmten Rechtsraum bleiben, und Nutzer werden aus einer nahen Region schneller bedient, weil kein Netzwerk die Lichtgeschwindigkeit schlagen kann (siehe Wie Computer kommunizieren).

Ein Content Delivery Network (CDN) treibt das weiter für Inhalte, die sich nicht pro Nutzer ändern, etwa Bilder, Stylesheets, Skripte und Videos. Es hält Kopien auf Servern an Hunderten Standorten, sogenannten Edge-Standorten, sodass ein Nutzer in Nairobi die Produktfotos des Shops aus einer nahen Stadt abruft statt aus einem Rechenzentrum in Europa. Die Seite lädt schneller, und die eigenen Server des Shops bearbeiten weit weniger Anfragen. Viele CDNs fangen auch Angriffsverkehr ab und können kleine Codestücke an der Edge ausführen.

Innerhalb einer Region

Eine Cloud-Region enthält drei Availability Zones mit jeweils eigenen Rechenzentren; eine Anwendung läuft in Kopien in zwei Zonen hinter einem Load Balancer, und ein CDN liefert statische Dateien von Edge-Standorten nahe den Nutzern ausRegion (zum Beispiel Westeuropa)Availability Zone 1Availability Zone 2Availability Zone 3App-KopieApp-KopiePrimäreDatenbankStandbyPrimär-DB-KopiefreieKapazitätLoad BalancerNutzerCDN-EdgenutzernahBilder, Skripte, Videos aus nahen Kopien
Kopien der Anwendung in zwei Availability Zones halten den Dienst am Laufen, wenn eine Zone ausfällt, während ein CDN statische Inhalte von Standorten nahe den Nutzern ausliefert.

Vertikal und horizontal skalieren

Wenn ein System mehr Arbeit bewältigen muss, gibt es zwei grundlegende Schritte. Vertikale Skalierung (Scale-up) bedeutet eine größere Maschine: mehr Kerne, mehr Arbeitsspeicher. Sie erfordert keine Änderung an der Software, was ihr großer Vorteil ist, aber es gibt eine größte Maschine, die man kaufen kann, nahe der Spitze wird es unverhältnismäßig teuer, und eine Maschine ist immer noch ein einzelner Ausfallpunkt. Horizontale Skalierung (Scale-out) bedeutet mehr Maschinen, die sich die Arbeit teilen, meist hinter einem Load Balancer, der die Anfragen auf sie verteilt und keine mehr an ausgefallene schickt. Sie reicht viel weiter und übersteht Maschinenausfälle, aber nur, wenn die Software dafür ausgelegt ist: Ein Server darf zum Beispiel die Session eines Nutzers nicht nur im eigenen Arbeitsspeicher halten oder hochgeladene Dateien nur auf der eigenen Festplatte speichern, wenn die nächste Anfrage des Nutzers bei einem anderen Server landen kann.

Die Cloud macht horizontale Skalierung attraktiv, weil eine zusätzliche Maschine nur einen API-Aufruf kostet und Autoscaling Kopien automatisch hinzufügen und entfernen kann, wenn sich die Last ändert. Datenbanken sind meist am schwersten horizontal zu skalieren, weshalb Kapitel 7 einen Abschnitt der Replikation und Partitionierung widmet.

Ausgearbeitetes Beispiel

Ausgearbeitetes Beispiel: eine Ticketbuchungsseite hosten

Eine kleine Theaterkette verkauft Tickets online. Die meiste Zeit der Woche ist wenig los, aber wenn der Vorverkauf für eine beliebte Vorstellung beginnt, kommen innerhalb von Minuten zehnmal so viele Menschen.

Eine gemietete VM (IaaS)Einfach und günstig. Das Team patcht das OS. Am Vorverkaufstag ist die einzelne Maschine überlastet, und wenn sie ausfällt, ist die Seite offline.
Größere VMVertikale Skalierung verschafft Reserven ohne Codeänderung, aber das Theater zahlt die ganze Woche für die große Maschine, um ein paar geschäftige Stunden abzudecken.
App auf einer PaaS, zwei Zonen, AutoscalingKopien der App laufen in zwei Availability Zones hinter einem Load Balancer. Am Vorverkaufstag fügt die Plattform automatisch Kopien hinzu und entfernt sie danach wieder. Voraussetzung ist, dass die App keine Session-Daten im lokalen Arbeitsspeicher hält.
Verwaltete DatenbankDer Anbieter betreibt eine Primärdatenbank in einer Zone und ein Standby in einer anderen, mit automatischen Backups. Das Schema und die Indizes entwirft weiterhin das Team (siehe Daten speichern).
CDN für Bilder und SkripteSaalpläne und Fotos der Vorstellungen werden von Edge-Standorten ausgeliefert, sodass sich die App-Server auf die Buchungen konzentrieren können.

Der endgültige Entwurf kostet in der Einrichtung mehr als eine VM, im Betrieb aber weniger als eine dauerhaft überdimensionierte Maschine, und er übersteht sowohl eine Lastspitze als auch den Verlust eines Rechenzentrums.

Jeder Schritt tauschte Kontrolle gegen Bequemlichkeit: Das Team entschied, welche Arbeit es behält und welche es an den Anbieter abgibt.

Warum das für die Architektur wichtig ist

Wo Software läuft, ist heute eine Architekturentscheidung und kein nachträglicher Gedanke. Die Wahl zwischen VMs, Containern, Plattformen und Funktionen prägt die Kosten, wie schnell das Team Releases ausliefern kann, wie das System skaliert und was passiert, wenn ein Rechenzentrum ausfällt. Regionen und Zonen machen aus Verfügbarkeitszielen konkrete Deployment-Pläne; Managed Services tauschen Betriebsarbeit gegen die Abhängigkeit von einem Anbieter. Kapitel 9 entwickelt Skalierungsstrategien, und Kapitel 10 behandelt Cloud-Service- und Bereitstellungsmodelle, Container und Infrastruktur in professioneller Tiefe.

Prüfen Sie Ihr Verständnis

Warum starten Container schneller und brauchen weniger Platz als virtuelle Maschinen?

Ein Container bootet kein eigenes Betriebssystem: Er ist ein isolierter Prozess, der den Kernel des Hosts mitbenutzt, und enthält nur die Anwendung und ihre Bibliotheken. Eine VM enthält ein vollständiges Gastbetriebssystem und bootet es.

Ein Team mietet eine VM in der Cloud und installiert darauf seine eigene Datenbank. Wer ist dafür verantwortlich, das Betriebssystem zu patchen?

Das Team. Bei IaaS verwaltet der Anbieter die Hardware und die Virtualisierung, und der Kunde verwaltet das Betriebssystem und alles darüber.

Vor welchem Ausfall schützt der Betrieb in zwei Availability Zones, und wovor schützt er nicht?

Er schützt vor dem Verlust eines Rechenzentrums oder einer Zone (Strom, Brand, Netzwerk). Er schützt nicht vor dem Verlust der ganzen Region und nicht vor Softwarefehlern und fehlerhaften Daten, die jede Kopie betreffen.

Warum könnte sich eine Anwendung, die auf einem Server einwandfrei läuft, fehlerhaft verhalten, wenn sie hinter einem Load Balancer horizontal skaliert wird?

Sie hält womöglich Zustand wie Nutzer-Sessions im eigenen Arbeitsspeicher; schickt der Load Balancer die nächste Anfrage an eine andere Kopie, kennt diese Kopie den Nutzer nicht.

Weiter · 0.8Wie Software entstehtWie Teams Bedürfnisse in User Stories übersetzen, mit Git und Pull Requests zusammenarbeiten, auf mehreren Ebenen testen, über CI/CD und Umgebungen ausliefern und wie ein einziges Tippen in einer Essensliefer-App jeden Teil eines Systems durchläuft.Weiter →

Quellen und weiterführende Literatur

Haben Sie eine Frage zu diesem Abschnitt? ArchitectBot, der KI-Lernassistent des Kurses, antwortet zuerst aus dem Kurs.

Fragen: „Wie entscheide ich bei einer kleinen Webanwendung mit sprunghaftem Verkehr, ob ich sie auf einer virtuellen Maschine, in Containern auf einer Plattform oder als Serverless-Funktionen betreibe?“