Skip to content

Herausforderungen verteilter Systeme

Einleitung

Wenn eine Maschine nicht mehr ausreicht, fangen die Probleme erst richtig an. Verteilte Systeme sind das Fundament des modernen Internets — von WeChat-Nachrichten bis hin zu Taobao-Bestellungen, im Hintergrund arbeiten Hunderte von Maschinen zusammen. Aber „verteilt" ist kein kostenloses Mittagessen. Es bringt eine Reihe von Herausforderungen mit sich, die in Einzelplatzsystemen nie auftreten.

Was werden Sie in diesem Artikel lernen?

Nach Abschluss dieses Kapitels werden Sie Folgendes beherrschen:

  • Kerntheorem: Das CAP-Theorem und seine Auswirkungen auf das Systemdesign verstehen
  • Konsistenzmodelle: Starke Konsistenz, EVENTUELLE Konsistenz und kausale Konsistenz unterscheiden
  • Acht Herausforderungen: Die zentralen Probleme verteilter Systeme beherrschen
  • Konsensalgorithmen: Die Grundideen von Paxos, Raft und weiteren Konsensprotokollen kennenlernen
  • Praktische Muster: Vertrautheit mit 2PC, Saga, CRDT und anderen gängigen Lösungsmustern
KapitelInhaltKernkonzepte
Kapitel 1Warum verteilte Systeme?Skalierbarkeit, Verfügbarkeit, geografische Verteilung
Kapitel 2CAP-TheoremKonsistenz, Verfügbarkeit, Partitionstoleranz
Kapitel 3KonsistenzmodelleStark konsistent, eventual konsistent, kausal konsistent
Kapitel 4Acht HerausforderungenNetzwerk, Uhren, Partitionen, Split-Brain usw.
Kapitel 5KonsensalgorithmenPaxos, Raft, ZAB
Kapitel 6Verteilte Transaktionen2PC, Saga, TCC

0. Übersicht: Warum verteilte Systeme?

Einzelplatzsysteme sind einfach und zuverlässig, haben jedoch drei unüberwindbare Engpässe:

EngpassBeschreibungLösung durch verteilte Systeme
LeistungsgrenzeEinzelne Maschine hat physikalische Grenzen bei CPU, Speicher und FestplatteHorizontale Skalierung: Mehrere Maschinen teilen sich die Last
Single Point of FailureFällt eine Maschine aus, fällt der gesamte Dienst ausRedundante Replika: Mehrere Maschinen als Backup
Geografische LatenzNutzer sind weltweit verteilt, eine Maschine kann nur an einem Standort stehenMehrstandortbereitstellung: Nutzer werden lokal bedient

Der Preis verteilter Systeme

Verteilte Systeme lösen die oben genannten Probleme, führen jedoch neue Komplexität ein: unzuverlässiges Netzwerk, nicht synchronisierte Uhren, Teilausfälle, Datenkonsistenz ... Genau diese „Herausforderungen" werden in diesem Artikel behandelt.

Peter Deutschs acht Irrtümer der verteilten Berechnung zeigen uns, dass folgende Annahmen in verteilten Umgebungen alle falsch sind:

  1. Das Netzwerk ist zuverlässig
  2. Die Latenz ist null
  3. Die Bandbreite ist unendlich
  4. Das Netzwerk ist sicher
  5. Die Topologie ändert sich nicht
  6. Es gibt nur einen Administrator
  7. Die Übertragungskosten sind null
  8. Das Netzwerk ist homogen

1. CAP-Theorem: Das „Unmögliche-Dreieck" verteilter Systeme

Im Jahr 2000 stellte Eric Brewer die CAP-Vermutung auf (später als Theorem bewiesen): Ein verteiltes System kann höchstens zwei der folgenden drei Eigenschaften gleichzeitig erfüllen.

EigenschaftBedeutungAlltagserklärung
Consistency (Konsistenz)Alle Knoten sehen zu jedem Zeitpunkt dieselben DatenAn jedem Geldautomaten sehen Sie denselben Kontostand
Availability (Verfügbarkeit)Jede Anfrage erhält eine fehlerfreie AntwortDas System kann Ihnen immer antworten, nie „Dienst nicht verfügbar"
Partition tolerance (Partitionstoleranz)Das System funktioniert auch bei Netzwerkpartition weiterSelbst wenn einige Kabel durchtrennt sind, funktioniert das System noch
CAP Theorem Interactive Demo
Select two properties to inspect the corresponding system type
C
Consistency
All nodes see the same data
A
Availability
Every request receives a response
P
Partition tolerance
The system keeps running during network partitions
CA system (gives up partition tolerance)
When there is no network partition, the system can provide both consistency and availability. In distributed environments, partitions are unavoidable, so pure CA systems are rare in practice.
Typical systems: Single-node MySQL, PostgreSQL in single-node mode
Sacrifices: Partition tolerance (P): unavailable during network failures

Warum nur zwei?

In einer verteilten Umgebung sind Netzwerkpartitionen (P) unvermeidbar — Glasfaserkabel werden durchtrennt, Switches fallen aus, Rechenzentren verlieren die Netzverbindung. Daher ist P ein Muss, die eigentliche Entscheidung liegt zwischen C und A:

  • CP wählen: Bei Partitionierung unsichere Anfragen ablehnen, Datenkorrektheit gewährleisten → geeignet für Finanzen, Bestandsverwaltung
  • AP wählen: Bei Partitionierung weiterarbeiten, aber Daten können vorübergehend inkonsistent sein → geeignet für Soziales, Inhalte

CAP ist nicht schwarz-weiß

Reale Systeme sind nicht einfach „CP oder AP". Viele Systeme treffen bei verschiedenen Operationen unterschiedliche Entscheidungen — beispielsweise kann dieselbe Datenbank Leseoperationen als AP gestalten (veraltete Daten zulassen) und Schreiboperationen als CP (Mehrheitsbestätigung verlangen).


2. Konsistenzmodelle: Der „Strengheitsgrad" der Datensynchronisation

Konsistenz ist kein Schalter (vorhanden oder nicht), sondern ein Spektrum. Verschiedene Konsistenzmodelle treffen unterschiedliche Kompromisse zwischen „Korrektheit" und „Leistung".

Consistency Model Comparison
Click to compare behavior across consistency models
Strong consistency
Eventual consistency
Causal consistency
Strong consistency
After a write succeeds, every node immediately returns the newest value, giving an experience like a single-machine database.
T1
Node A
v1
Node B
v1
Node C
v1
Initial state: all nodes are consistent
T2
Node A
v2 write
Node B
syncing...
Node C
syncing...
The client writes v2 and waits for every node to confirm
T3
Node A
v2
Node B
v2
Node C
v2
Only after all nodes confirm does the write succeed; any node reads v2
Trade-off: Higher latency because all nodes must confirm, and lower availability because node failures may block progress.

Vergleich der Konsistenzmodelle

ModellGarantieLatenzAnwendungsbereich
Starke KonsistenzGelesener Wert ist immer der zuletzt geschriebeneHoch (Warten auf Synchronisation)Banküberweisungen, Bestandsabzug
Eventuelle KonsistenzAlle Replika werden schließlich konsistent, aber zwischendurch können veraltete Werte gelesen werdenNiedrig (Schreibvorgang kehrt sofort zurück)Soziale Aktivitäten, DNS
Kausale KonsistenzKausal zusammenhängende Operationen sind in ihrer Reihenfolge garantiertMittelKommentarantworten, kollaboratives Bearbeiten
Lineare KonsistenzAlle Operationen wirken so, als würden sie auf einer einzelnen Maschine in Reihenfolge ausgeführtHöchsteVerteilte Sperren, Leader-Wahl
SitzungskonsistenzInnerhalb derselben Sitzung wird garantiert die eigenen Schreibvorgänge zu lesenNiedrig-MittelPersönliche Nutzerdaten

„Read Your Own Writes"-Konsistenz

Die häufigste praktische Anforderung ist: Nachdem ein Nutzer seine eigenen Daten geändert hat, kann er die Aktualisierung sofort sehen (andere Nutzer können sie etwas später sehen). Dies wird als „Read Your Own Writes"-Konsistenz bezeichnet und ist eine praktische Erweiterung der eventualen Konsistenz.


3. Acht Herausforderungen: Das „Minenfeld" verteilter Systeme

Die Komplexität verteilter Systeme entsteht nicht durch ein einzelnes Problem, sondern durch das Zusammenspiel mehrerer Probleme. Im Folgenden die acht wichtigsten Herausforderungen.

Eight Challenges in Distributed Systems
Click each challenge to inspect details and mitigation strategies
🔌
Unreliable network
Clock drift
✂️
Network partition
🔄
Data consistency
💥
Partial failure
🧠
Split brain
📋
Event ordering
🔐
Distributed transaction
🔌 Unreliable network
Nodes communicate over networks that may drop packets, delay messages, or disconnect at any time. This is the fundamental challenge of distributed systems: never assume the network is reliable.
Scenario: Service A calls service B and receives no response after 3 seconds. Did B miss the request, or did B process it and lose the response? A cannot tell.
Mitigation strategies:
  • Timeouts and retries with idempotency
  • Heartbeat checks to detect connection health
  • Circuit breakers to pause calls after repeated failures

Zusammenhänge zwischen den Herausforderungen

Diese acht Herausforderungen sind nicht isoliert, sie hängen zusammen:

  • Unzuverlässiges Netzwerk → führt zu Netzwerkpartitionen → löst CAP-Kompromisse aus
  • Nicht synchronisierte Uhren → führt zu Schwierigkeiten bei der Ereignissortierung → beeinflusst Datenkonsistenz
  • Teilausfälle → können zu Split-Brain führen → erfordern Konsensalgorithmen zur Lösung
  • Datenkonsistenz → erfordert verteilt Transaktionen → diese werden jedoch von unzuverlässigem Netzwerk beeinflusst

Es gibt keine Silberkugel

Verteilte Systeme haben keine „perfekte" Lösung, nur „geeignete" Kompromisse. Die Natur dieser Herausforderungen zu verstehen, ist entscheidend, um beim Systemdesign die richtigen Abwägungen zu treffen.


4. Konsensalgorithmen: Wie mehrere Maschinen sich „einig" werden

Konsensalgorithmen sind der Kern verteilter Systeme — sie lösen das Problem: Wie kommen mehrere Knoten über einen Wert überein, selbst wenn einige Knoten ausfallen oder Netzwerkverzögerungen auftreten?

4.1 Paxos

Von Leslie Lamport 1990 vorgeschlagen, ist es der erste mathematisch bewiesene Konsensalgorithmus.

RolleVerantwortung
ProposerStellt einen Vorschlag (Wert) vor
AcceptorStimmt über die Annahme oder Ablehnung des Vorschlags ab
LearnerLernt den endgültig gewählten Wert

Zweiphasenablauf:

  1. Prepare-Phase: Der Proposer sendet eine Vorschlagsnummer, der Acceptor verspricht, keine Vorschläge mit kleinerer Nummer mehr zu akzeptieren
  2. Accept-Phase: Der Proposer sendet den konkreten Wert, bei Annahme durch die Mehrheit der Acceptoren wird der Vorschlag angenommen

Das Problem mit Paxos

Paxos ist zwar korrekt, aber berüchtigt dafür, schwer verständlich und zu implementieren zu sein. Lamports eigener Aufsatz verwendete eine griechische Parlamentsanalogie, die noch mehr Menschen verwirrt hat.

4.2 Raft: Für Verständlichkeit geschaffen

2014 stellte Diego Ongaro Raft vor, mit dem Ziel, ein „leicht verständliches Paxos" zu schaffen. Es zerlegt das Konsensproblem in drei Teilprobleme:

TeilproblemBeschreibung
Leader-WahlEin Leader wird im Cluster gewählt, alle Schreibvorgänge laufen über den Leader
Log-ReplikationDer Leader repliziert das Operationsprotokoll auf alle Follower
SicherheitGarantiert, dass commitierte Protokolleinträge nicht überschrieben werden

Der Kernablauf von Raft:

  1. Beim Clusterstart sind alle Knoten Follower
  2. Wenn ein Follower länger keinen Leader-Herzschlag erhält, wird er zum Candidate und initiiert eine Wahl
  3. Der Candidate, der die Mehrheit der Stimmen erhält, wird der neue Leader
  4. Der Leader nimmt Client-Anfragen an und commitiert den Log, nachdem er auf die Mehrheit der Knoten repliziert wurde

4.3 Vergleich der Konsensalgorithmen

AlgorithmusVorgeschlagenVerständlichkeitVerwendete Systeme
Paxos1990SchwerGoogle Chubby
Raft2014Leichtetcd, Consul, TiKV
ZAB2011MittelZooKeeper
EPaxos2013SchwerVorwiegend akademische Forschung

5. Verteilte Transaktionen: Knotenübergreifendes „Alles oder Nichts"

Transaktionen in Einzelplatzdatenbanken lassen sich mit lokalen Sperren und Logs als ACID umsetzen. Wenn jedoch ein Geschäftsvorgang mehrere Services/Datenbanken umfasst, wie wird dann die Atomarität gewährleistet?

5.1 Zweiphasencommit (2PC)

Das klassischste Protokoll für verteilte Transaktionen, in zwei Phasen unterteilt:

PhaseAktion des KoordinatorsAktion der Teilnehmer
PrepareFragt alle Teilnehmer „Kann committet werden?"Führt Operation aus, aber ohne Commit, antwortet mit Ja/Nein
CommitWenn alle Ja, sendet CommitOffizielles Commit; bei einem Nein, alle Rollback

Probleme von 2PC:

  • Blockierung: Wenn der Koordinator nach Prepare ausfällt, warten die Teilnehmer unbegrenzt
  • Single Point of Failure: Der Koordinator ist ein Single Point, fällt er aus, bleibt die Transaktion stecken
  • Schlechte Leistung: Mehrere Netzwerkroundtrips erforderlich, lange Sperrhaltung

5.2 Saga-Muster

Saga zerlegt eine große Transaktion in mehrere lokale Transaktionen, von denen jede einen entsprechenden Kompensationsvorgang hat. Wenn ein Schritt fehlschlägt, werden die Kompensationen in umgekehrter Reihenfolge ausgeführt.

Saga-Beispiel für eine E-Commerce-Bestellung:

SchrittVorwärtsoperationKompensationsoperation
T1Bestellung erstellen (ausstehend)Bestellung stornieren
T2Bestand abziehenBestand wiederherstellen
T3Guthaben abziehenGuthaben zurückerstatten
T4Bestellung bestätigen (bezahlt)

Wenn T3 (Guthaben abziehen) fehlschlägt: C2 ausführen (Bestand wiederherstellen) → C1 (Bestellung stornieren).

Zwei Orchestrierungsansätze:

  • Choreography: Jeder Service lauscht auf Ereignisse und entscheidet selbst über den nächsten Schritt. Einfach, aber der globale Zustand ist schwer nachzuverfolgen
  • Orchestration: Ein zentraler Koordinator steuert den Ablauf. Klar, aber der Koordinator ist ein Single Point

5.3 TCC (Try-Confirm-Cancel)

TCC ist eine Implementierung von 2PC auf Geschäftsebene, die jede Operation in drei Phasen unterteilt:

PhaseBeschreibungBeispiel (Bestand abziehen)
TryRessourcen reservieren, aber nicht wirklich ausführen10 Einheiten einfrieren (verfügbarer Bestand -10, eingefrorener Bestand +10)
ConfirmAusführung bestätigen, reservierte Ressourcen verbrauchenEingefrorener Bestand -10 (tatsächlicher Abzug)
CancelReservierung stornieren, Ressourcen freigebenEingefrorener Bestand -10, verfügbarer Bestand +10 (Wiederherstellung)

5.4 Vergleich der drei Ansätze

AnsatzKonsistenzLeistungKomplexitätAnwendungsbereich
2PCStark konsistentNiedrigMittelDatenbankübergreifende Transaktionen auf Datenbankebene
SagaEventual konsistentHochHochLanglaufende Geschäftsprozesse (Bestellungen, Logistik)
TCCEventual konsistentMittelAm höchstenFinanzszenarien mit hoher Zuverlässigkeit

Empfehlungen für die Praxis

  • Wenn eine Einzelplatzdatenbank-Transaktion ausreicht, keine verteilten Transaktionen verwenden
  • Für die meisten Geschäftsszenarien reicht Saga + Nachrichtenwarteschlange
  • TCC eignet sich für Finanzszenarien mit höchsten Konsistenzanforderungen, ist aber sehr aufwendig in der Entwicklung
  • 2PC eignet sich für automatische Verarbeitung durch Datenbank-Middleware (z. B. ShardingSphere)

Zusammenfassung

Verteilte Systeme sind die Infrastruktur des modernen Internets, aber ihre Komplexität übersteigt die von Einzelplatzsystemen bei weitem. Diese Herausforderungen zu verstehen dient nicht dazu, sie zu „lösen" (viele sind fundamental), sondern um beim Systemdesign die richtigen Kompromisse zu treffen.

Rückblick auf die wichtigsten Punkte dieses Kapitels:

  1. CAP-Theorem: Netzwerkpartitionen sind unvermeidbar, die eigentliche Entscheidung ist ein Kompromiss zwischen Konsistenz und Verfügbarkeit
  2. Konsistenzmodelle: Von starker Konsistenz bis eventualer Konsistenz ist es ein Spektrum, die Wahl richtet sich nach den geschäftlichen Anforderungen
  3. Acht Herausforderungen: Unzuverlässiges Netzwerk, nicht synchronisierte Uhren, Netzwerkpartitionen, Split-Brain usw. hängen zusammen
  4. Konsensalgorithmen: Raft ist der derzeit praktischste Konsensalgorithmus, etcd/Consul basieren darauf
  5. Verteilte Transaktionen: Saga eignet sich für die meisten Szenarien, TCC für Finanzszenarien, 2PC für die Datenbankebene

Weiterführende Literatur