Definition

Was ist ein Zwei-Phasen-Commit (2PC)?

| Autor / Redakteur: Stefan Luber / Nico Litzel

(Bild: © aga7ta - stock.adobe.com)

Der Zwei-Phasen-Commit stellt in verteilt arbeitenden Systemen wie verteilten Datenbanksystemen die Konsistenz der Transaktionen sicher. Er besteht aus den Phasen Vorbereitungsphase und Commitphase. Die Akteure im Zwei-Phasen-Commit-Verfahren sind der Koordinator und die Agenten.

Die Abkürzung 2PC steht für Zwei-Phasen-Commit. Es handelt sich um ein Verfahren beziehungsweise Protokoll, das die konsistente Ausführung von Transaktionen in verteilt arbeitenden Systemen sicherstellt. Es kommt beispielsweise bei verteilten Datenbanksystemen zum Einsatz und regelt die Durchführung der Transaktion mithilfe der beiden Phasen Vorbereitungsphase und Commitphase. In den Phasen ist genau festgelegt, wie die an einer Transaktion beteiligten Systeme kommunizieren. Es sind die Rollen Koordinator und Agent definiert. Das Ergebnis einer per Zwei-Phasen-Commit-Protokoll durchgeführten Transaktion ist entweder die Festschreibung oder der Rollback (das Rückgängigmachen) der Transaktion.

Mit dem Verfahren lassen sich verschiedene Fehlersituationen wie der Ausfall einzelner Systeme oder Unterbrechungen der Netzwerkverbindungen abfangen. Neben dem Zwei-Phasen-Commit-Verfahren existieren weitere Verfahren für verteilte Systeme wie das Drei-Phasen-Commit-Verfahren. Das Zwei-Phasen-Commit-Verfahren ist weit verbreitet und existiert in verschiedenen herstellerspezifischen Varianten.

Vom Zwei-Phasen-Commit-Protokoll zu erfüllende Anforderungen im Umfeld verteilt arbeitender Datenbanken

Commit-Protokolle stellen nicht nur die Konsistenz der Transaktionen in verteilten Datenbanksystemen sicher. Grundsätzlich geht es darum, dass die Transaktionen die sogenannten ACID-Anforderungen erfüllen. Die Abkürzung ACID steht für:

  • Atomarität (atomicity)
  • Konsistenz (consistency)
  • Abgrenzung (isolation)
  • Dauerhaftigkeit (durability)

Nicht alle Commit-Protokolle erfüllen alle Anforderungen gleich gut.

Grundprinzip des Zwei-Phasen-Commits

Wie es der Name bereits sagt, besteht der Zwei-Phasen-Commit aus zwei Einzelphasen, die die Transaktionen zu durchlaufen haben. Die erste Phase ist die Vorbereitungsphase. In dieser Phase teilt der Koordinator den Agenten den Transaktionswunsch mit. Die an der Transaktion beteiligten Agenten stimmen zu oder lehnen ab. In der zweiten Phase informiert der Koordinator die Agenten über das Ergebnis der Vorbereitungsphase. Haben alle zugestimmt, entscheidet sich der Koordinator für den Commit und die Transaktion wird von den Agenten festgeschrieben. Haben einzelne Agenten abgelehnt oder erfolgte keine Antwort, fordert der Koordinator die Agenten zum Rollback (Zurücksetzen) auf.

Typischer Ablauf eines Zwei-Phasen-Commits

Im Folgenden ein typischer Ablauf eines Zwei-Phasen-Commits:

  • Der Koordinator möchte eine Transaktion durchführen lassen und leitet die Vorbereitungsphase ein, indem er eine Prepare-Nachricht an die beteiligten Agenten sendet.
  • Die Agenten führen die Transaktion temporär aus und erstellen die hierfür notwendigen Redo- und Undo-Logdaten.
  • Die Agenten bestätigen die erfolgreiche Ausführung mit einer Ready-Nachricht oder senden im Fehlerfall eine Failed-Nachricht.
  • Erhält der Koordinator von allen beteiligten Agenten eine Ready-Nachricht, sendet er eine Commit-Nachricht an diese und leitet die Commitphase ein.
  • Fehlen Ready-Nachrichten oder erhält der Koordinator Failed-Nachrichten, sendet er eine Abort-Nachricht an die Agenten.
  • Erhalten die Agenten eine Commit-Nachricht, schließen sie die Transaktion ab und schreiben sie fest. Dies bestätigen sie mit einer Ack-Nachricht.
  • Im Fall einer Abort-Nachricht vom Koordinator machen sie die temporäre Transaktion rückgängig und bestätigen dies ebenfalls mit einer Ack-Nachricht.
  • Wenn der Koordinator alle Ack-Nachrichten erhalten hat, beendet er die Commitphase mit Commit oder Abort

Mögliche Fehlersituationen und ihre Behandlung durch das Zwei-Phasen-Commit-Protokoll

Das Zwei-Phasen-Commit-Protokoll kann verschiedene Fehlersituationen abfangen und verhindern, dass es zu inkonsistenten Datenbankeinträgen kommt. Typische Fehler, die während einer verteilt ablaufenden Transaktion auftreten, sind:

  • Der Ausfall eines oder mehrerer Agenten,
  • der Ausfall des Koordinators,
  • der Ausfall einer Netzwerkverbindung sowie
  • das Verlieren einer Nachricht.

In allen Fällen stellt der Zwei-Phasen-Commit sicher, dass eine Transaktion auf den beteiligten Systemen nicht zu unterschiedlichen Ergebnissen führt.

Fällt beispielsweise ein Agent aus oder stürzt ein Agenten-Prozess ab, erkennt dies der Koordinator, da auf eine Prepare-Nachricht innerhalb einer definierten Zeit keine Antwort eintrifft. Der Koordinator bricht die Transaktion ab und sendet an alle Agenten eine Abort-Nachricht. Der ausgefallene Agent analysiert nach Wiederanlauf seine Log-Daten. Abhängig vom jeweiligen Zustand (committed, aborted, prepared) setzt er die Transaktion zurück, führt ein Redo aus oder fragt beim Koordinator das globale Commit-Ergebnis nach.

Ausfälle von Netzwerkverbindungen oder verlorene Nachrichten lassen sich über Timeout-Verfahren erkennen und behandeln. Sind beispielsweise Agenten über das Netzwerk nicht mehr zu erreichen und treten Timeouts für erwartete Antworten auf, behandelt der Koordinator diese Fehlersituation wie ausgefallene oder abgestürzte Agenten.

Nachteile des Zwei-Phasen-Commit-Verfahrens

Während ein Agent in der Vorbereitungsphase seine Entscheidung dem Koordinator mitgeteilt hat und auf dessen globale Commit- oder Abort-Entscheidung wartet, ist der Transaktionsprozess blockiert. Er kann weder die Transaktion abschließen noch zurücksetzen und Ressourcen freigeben. Treten Kommunikationsfehler auf oder ist das Ablaufen eines Timeouts aufgrund ausstehender Antworten anderer Agenten beziehungsweise des Koordinators abzuwarten, kann die Blockierung längere Zeit andauern. Diese Blockierung schränkt die Nutzbarkeit der Agenten für andere Transaktionen zum Teil stark ein.

Kommentare werden geladen....

Kommentar zu diesem Artikel abgeben

Der Kommentar wird durch einen Redakteur geprüft und in Kürze freigeschaltet.

Anonym mitdiskutieren oder einloggen Anmelden

Avatar
Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
  1. Avatar
    Avatar
    Bearbeitet von am
    Bearbeitet von am
    1. Avatar
      Avatar
      Bearbeitet von am
      Bearbeitet von am

Kommentare werden geladen....

Kommentar melden

Melden Sie diesen Kommentar, wenn dieser nicht den Richtlinien entspricht.

Kommentar Freigeben

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Freigabe entfernen

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Infos finden Sie unter www.mycontentfactory.de (ID: 45902117 / Definitionen)