Wikipedia · einfach zusammengefasst · Stand
Commit-Protokoll
Commit-Protokolle der Informatik regeln die Festschreibung (Commit) von Daten, die durch eine (verteilte) Transaktion beispielsweise in einem …
Inhalt4 Abschnitte
Aufgabe und Grundprinzip
Commit-Protokolle regeln in der Informatik die Festschreibung (Commit) von Daten, die durch eine Transaktion verändert werden sollen. Das betrifft besonders verteilte Transaktionen, bei denen mehrere Prozesse – im Englischen in diesem Zusammenhang auch agents genannt – gemeinsam und voneinander abhängig Daten verändern. Bekannte Commit-Protokolle für verteilte Systeme sind unter anderem Paxos, Raft sowie Zwei- und Drei-Phasen-Commit.
Die wünschenswerten Eigenschaften von Transaktionen werden durch ACID beschrieben. Das Commit-Protokoll ist für die Gewährleistung dieser Eigenschaften zuständig; abhängig vom jeweiligen Protokoll müssen jedoch nicht alle Eigenschaften verpflichtend erfüllt werden.
Ein Commit-Protokoll legt fest, wie die an einer Transaktion beteiligten Prozesse über einen Koordinator kommunizieren, welche Informationen protokolliert beziehungsweise geloggt werden und wann die betroffenen Daten endgültig festgeschrieben werden. Außerdem behandelt es Fehlersituationen, beispielsweise den Absturz des Koordinators während einer Protokollphase. Bei verteilten Transaktionen ist ein verteiltes Commit-Protokoll erforderlich, damit insbesondere die Atomarität gewährleistet werden kann.
Zwei-Phasen-Commit
Das bekannteste und über X/Open XA standardisierte Verfahren ist das Two-Phase-Commit beziehungsweise Zwei-Phasen-Commit (2PC). Ein Koordinator, meist der Prozess, der die Festschreibung einleitet, sammelt zunächst die Zustimmung oder Ablehnung aller beteiligten Prozesse. Diese erste Phase heißt Abstimmungsphase. Nur wenn alle Teilnehmer zustimmen, entscheidet der Koordinator auf Commit. Sobald mindestens ein Teilnehmer ablehnt oder fehlschlägt, lautet die gemeinsame Entscheidung Rollback, also Zurücksetzen.
In der zweiten Phase, der Commit-Phase, teilt der Koordinator allen Teilnehmern das Ergebnis mit. Entsprechend dem gemeinsamen Ergebnis wird entweder die gesamte Transaktion zurückgesetzt oder alle Teiltransaktionen werden erfolgreich beendet. Dabei werden die zuvor gesperrten Ressourcen wieder freigegeben.
Ablauf des 2PC-Protokolls
In der Commit-request-Phase sendet der Koordinator an alle Teilnehmer die Nachricht prepare und wartet auf die Antwort jedes Teilnehmers. Die Teilnehmer verarbeiten die Transaktion bis zu dem Punkt, an dem sie entweder mit Commit oder Rollback abgeschlossen werden kann. Währenddessen schreiben sie Einträge in ihr undo log und ihr redo log. War die Verarbeitung erfolgreich, antwortet ein Teilnehmer mit ready; bei einem Fehlschlag antwortet er mit failed.
Wenn der Koordinator von allen Teilnehmern ready erhalten hat, sendet er in der Commit-Phase commit an alle. Die Teilnehmer schließen ihre Transaktion mit Commit ab, geben Sperren und Ressourcen frei und senden anschließend ein acknowledgment zurück. Der Koordinator beendet die Transaktion, sobald er die Bestätigung aller Teilnehmer erhalten hat.
Sendet mindestens ein Teilnehmer failed, schickt der Koordinator abort an alle Teilnehmer. Diese schließen die Transaktion mit Rollback ab, wobei das undo log verwendet wird, geben ihre Sperren und Ressourcen frei und senden ebenfalls ein acknowledgment. Der Koordinator beendet die Transaktion mit Rollback, wenn alle Bestätigungen eingegangen sind.
Korrektheit, Blockierung und 3PC
Das 2PC-Protokoll garantiert Korrektheit auch dann, wenn einzelne oder mehrere Rechner ausfallen oder Netzwerkpartitionierungen auftreten, durch die die Kommunikation zwischen weiterhin laufenden Rechnern unterbrochen wird. Korrektheit bedeutet hier, dass eine Transaktion bei verschiedenen Teilnehmern nicht zu unterschiedlichen Ergebnissen kommen kann.
Ein grundsätzliches Problem von 2PC ist jedoch die zwischenzeitliche Blockierung von Teilnehmern. Sie tritt auf, sobald ein Teilnehmer dem Koordinator seine lokale Commit-Entscheidung mitgeteilt hat und anschließend auf die globale Entscheidung wartet. Fällt der Koordinator in dieser Zeit aus, kann der Teilnehmer weder die gesperrten Ressourcen freigeben noch die lokale Transaktion zurücksetzen. Allenfalls kann er die globale Commit-Entscheidung von einem anderen Teilnehmer erfahren.
In der Fachliteratur werden zahlreiche Varianten des 2PC diskutiert. Sie sollen unter anderem die Zahl der notwendigen Protokollierungsvorgänge und Nachrichten reduzieren sowie die Robustheit erhöhen. Das Drei-Phasen-Commit-Protokoll (3PC) zielt besonders darauf, das Risiko einer Blockierung zu vermeiden. Dafür sind mehr Nachrichtenrunden erforderlich. Fällt der Koordinator zwischenzeitlich aus, soll das Protokoll dadurch von einem neuen Koordinator zu Ende geführt werden können.