Drei-Phasen-Commit-Protokoll - Three-phase commit protocol
In Computernetzwerken und Datenbanken ist das Dreiphasen-Commit-Protokoll ( 3PC ) ein verteilter Algorithmus, der es allen Knoten in einem verteilten System ermöglicht , einer Transaktion zuzustimmen . Es ist eine ausfallsicherere Verfeinerung des Zweiphasen-Commit-Protokolls (2PC).
Motivation
Ein zweiphasiges Commit-Protokoll kann sich nicht zuverlässig von einem Ausfall sowohl des Koordinators als auch eines Kohortenmitglieds während der Commit-Phase erholen . Wenn nur der Koordinator ausgefallen wäre und keine Kohortenmitglieder eine Commit-Nachricht erhalten hätten, könnte sicher gefolgert werden, dass kein Commit stattgefunden hat. Wenn jedoch sowohl der Koordinator als auch ein Kohortenmitglied ausgefallen sind, ist es möglich, dass das ausgefallene Kohortenmitglied als erstes benachrichtigt wurde und den Commit tatsächlich durchgeführt hat. Selbst wenn ein neuer Koordinator ausgewählt wird, kann er die Operation nicht sicher fortsetzen, bis er eine Zustimmung aller Kohortenmitglieder erhalten hat, und muss daher blockieren, bis alle Kohortenmitglieder antworten.
Das Drei-Phasen-Commit-Protokoll beseitigt dieses Problem, indem es den Status "Vorbereitet zum Festschreiben" einführt. Wenn der Koordinator versagt, bevor er preCommit-Nachrichten sendet, stimmt die Kohorte einstimmig zu, dass die Operation abgebrochen wurde. Der Koordinator wird auszusenden keine doCommit Nachricht , bis alle Kohortenmitglieder haben ACK ed , dass sie zu verpflichten vorbereitet . Dadurch wird die Möglichkeit ausgeschlossen, dass ein Kohortenmitglied die Transaktion tatsächlich abgeschlossen hat, bevor alle Kohortenmitglieder sich der Entscheidung bewusst waren (eine Mehrdeutigkeit, die eine unbestimmte Blockierung im Zweiphasen-Commit-Protokoll erforderlich machte ).
Lösung
Die oben eingeführte Pre-Commit-Phase hilft dem System bei der Wiederherstellung, wenn ein Teilnehmer oder sowohl der Koordinator als auch ein Teilnehmer während der Commit-Phase ausgefallen sind. Wenn der Wiederherstellungskoordinator übernimmt, nachdem der Koordinator während einer Festschreibungsphase des zweiphasigen Festschreibens fehlgeschlagen ist , ist die neue Vorfestsetzung wie folgt praktisch: Wenn er beim Abfragen von Teilnehmern erfährt, dass sich einige Knoten in der Festschreibungsphase befinden, nimmt er an, dass der vorherige Koordinator vor dem Absturz die Entscheidung zum Commit getroffen hat. Daher kann es das Protokoll zum Begehen übertragen. Wenn ein Teilnehmer sagt, dass er keine PrepareToCommit-Nachricht erhalten hat, kann der neue Koordinator auf ähnliche Weise davon ausgehen, dass der vorherige Koordinator versagt hat, noch bevor er die PrepareToCommit-Phase abgeschlossen hat. Daher kann es sicher davon ausgehen, dass kein Teilnehmer die Änderungen festgeschrieben hat, und kann daher die Transaktion sicher abbrechen.
Erweiterungen
Bei Verwendung des ursprünglichen dreiphasigen Commit-Protokolls von Skeen ist es möglich, dass ein Quorum verbunden wird, ohne dass Fortschritte erzielt werden können (dies ist keine Deadlock-Situation; das System wird weiterhin fortfahren, wenn die Netzwerkpartitionierung aufgelöst wird). E3PC von Keidar und Dolev verfeinert das Dreiphasen-Commit-Protokoll von Skeen und löst dieses Problem auf eine Weise, die es einem Quorum *immer* ermöglicht, Fortschritte zu machen.
Nachteile
Drei-Phasen-Commit setzt ein Netzwerk mit begrenzter Verzögerung und Knoten mit begrenzten Antwortzeiten voraus; In den meisten praktischen Systemen mit unbegrenzter Netzwerkverzögerung und Prozesspausen kann die Atomarität nicht garantiert werden. Der andere Nachteil des Protokolls besteht darin, dass es mindestens drei Roundtrips erfordert, um abzuschließen, wobei mindestens drei Roundtripzeiten (RTTs) erforderlich sind. Dies ist möglicherweise eine lange Latenzzeit, um jede Transaktion abzuschließen.