Zurück zur Übersicht

Begriff

Two-Phase Commit (2PC)

Distributed Systems Database S3
2 Quellen 0 Lernpfade 0 Backlinks enriched

Warum wichtig?

Dieser Begriff ist ein Knoten im SengakujiWorks-Wissensnetz. Nutze Level 0 für die erste Einordnung, Level 1 für Praxis, Level 2 für technische Struktur und Level 3 für Grenzen, Fallstricke und Expertenkontext.

Du willst eine Hochzeit feiern (Transaktion). Du (Koordinator) fragst alle Gäste: "Kommst du?" Es gibt zwei Phasen:

  1. Prepare (Voting): Der Priester fragt: "Willst du, Datenbank A, diese Daten speichern? Willst du, Datenbank B, diese Daten speichern?" Jede Datenbank prüft (habe ich Platz? Locks?), schreibt ins Log "Prepared" und antwortet "Ja".
  2. Commit (Decision): Wenn alle Ja gesagt haben, sagt der Priester: "Hiermit seid ihr committed!" -> Datenbanken schreiben endgültig. Wenn einer "Nein" sagt (oder nicht antwortet) -> Priester sagt: "Abort!" -> Alle rollen zurück. Das garantiert Atomicity über mehrere Server hinweg (Distributed Transaction).

Merksatz: Ein Protokoll zur Koordination verteilter Transaktionen, das in zwei Phasen (Prepare und Commit) sicherstellt, dass alle beteiligten Knoten entweder gemeinsam zustimmen (Commit) oder gemeinsam ablehnen (Abort).


Quick-Check

  1. Unterschied zu 3PC?
    3PC fügt eine Phase "Pre-Commit" hinzu, um das Blocking-Problem zu lösen. Wird aber in der Praxis fast nie genutzt (zu komplex, Netzwerk-Partitionen machen es kaputt). Paxos Commit ist besser.
  2. Langsam?
    Ja. 2 Round-Trips pro Transaktion. Und fsync auf allen Nodes. Skaliert schlecht.
  3. Wer nutzt es?
    Google Spanner nutzt 2PC über Paxos-Gruppen ("Paxos over 2PC"). Das ist State of the Art.