Verteilte Systeme (Distributed Systems) sind Zusammenstellungen unabhängiger Rechner, die ihren Benutzern als ein einziges kohärentes System erscheinen. Diese Definition stammt aus dem Standardwerk Distributed Systems: Principles and Paradigms von Andrew S. Tanenbaum und Maarten van Steen und hat zwei Seiten: Auf der Hardware-Ebene sind die Maschinen autonom und über ein Netzwerk verbunden; auf der Software-Ebene verbergen Middleware und Protokolle die Verteilung, sodass Anwendungen wie auf einem einzelnen System arbeiten.

Warum verteilte Systeme?

  • Skalierbarkeit: Mehr Rechner verarbeiten mehr Last — Horizontalskalierung statt einer immer teureren Einzelmaschine.
  • Ausfallsicherheit: Fällt ein Knoten aus, übernehmen andere — Voraussetzung für Hochverfügbarkeit.
  • Geografische Nähe: Rechenzentren entstehen dort, wo die Nutzer sind, und verkürzen die Antwortzeiten.
  • Ressourcenteilung: Daten, Dienste und Speicher werden über viele Maschinen gemeinsam genutzt.

Die zentralen Herausforderungen

Verteiltheit ist nicht gratis — sie bringt vier grundlegende Probleme mit sich:

  • Keine gemeinsame Uhr: Jeder Knoten hat eine eigene, driftende Uhr. Reihenfolgen lassen sich deshalb nicht an physischer Zeit festmachen; logische Uhren und Versionsvektoren (Lamport, 1978) übernehmen die Ordnung von Ereignissen.
  • Teilausfälle: Im Gegensatz zu einem Einzelsystem fällt nicht alles zusammen aus, sondern einzelne Komponenten — ein Netzwerkpaket geht verloren, ein Prozess hängt, ein Rechner stirbt. Fehlerbehandlung ist hier Regel, nicht Ausnahme.
  • Netzwerkpartitionen: Verbindungen zwischen Knoten können reißen. Das CAP-Theorem zeigt: Dann muss zwischen Konsistenz und Verfügbarkeit entschieden werden.
  • Nebenläufigkeit: Viele Prozesse arbeiten gleichzeitig auf geteilten Daten — Konsistenzmodelle wie Weak Consistency, Kausale Konsistenz, Strong Consistency und Eventual Consistency legen fest, welche Sicht auf die Daten Replikate einander erlauben.

Die Bausteine der Praxis

Verteilte Systeme setzen sich aus bewährten Mustern zusammen. Datenbank-Replikation und Sharding verteilen Daten, Leader Election bestimmt Koordinatoren, Abstimmungsverfahren wie das Quorum sichern Entscheidungen ab, und die Konsens-Algorithmen Raft und Paxos bringen Knoten auf einen gemeinsamen Stand. Für übergreifende Abläufe sorgen Verteilte Transaktionen und das Saga-Muster, für unkoordinierte Verbreitung das Gossip-Protokoll.

Beispiele aus der Praxis

Verteilte Systeme umgeben uns überall: das Domain Name System (DNS) verteilt die Namensauflösung über den Globus, das World Wide Web bedient Milliarden Nutzer über Serverfarmen, Container-Plattformen wie Kubernetes orchestrieren ihre Cluster. Auf der Datenbank-Seite stehen Google Spanner (global stark konsistent) und Amazon DynamoDB (verfügbarkeitsorientiert, NoSQL) exemplarisch für die beiden Enden des Konsistenzspektrums.