Deutsch

Eine detaillierte Untersuchung verteilter Transaktionen und des Two-Phase-Commit (2PC)-Protokolls. Erfahren Sie mehr über seine Architektur, Vor- und Nachteile sowie praktische Anwendungen in globalen Systemen.

Verteilte Transaktionen: Ein tiefer Einblick in Two-Phase Commit (2PC)

In der heutigen zunehmend vernetzten Welt müssen Anwendungen oft mit Daten interagieren, die über mehrere unabhängige Systeme verteilt sind. Dies führt zum Konzept der verteilten Transaktionen, bei denen eine einzige logische Operation Änderungen über mehrere Datenbanken oder Dienste hinweg erfordert. Die Gewährleistung der Datenkonsistenz in solchen Szenarien ist von größter Bedeutung, und eines der bekanntesten Protokolle zur Erreichung dieses Ziels ist der Two-Phase Commit (2PC).

Was ist eine verteilte Transaktion?

Eine verteilte Transaktion ist eine Reihe von Operationen, die auf mehreren, geografisch verteilten Systemen ausgeführt und als eine einzige atomare Einheit behandelt werden. Dies bedeutet, dass entweder alle Operationen innerhalb der Transaktion erfolgreich sein müssen (Commit), oder keine (Rollback). Dieses "Alles-oder-Nichts"-Prinzip gewährleistet die Datenintegrität über das gesamte verteilte System hinweg.

Stellen Sie sich ein Szenario vor, in dem ein Kunde in Tokio einen Flug von Tokio nach London in einem Flugliniensystem bucht und gleichzeitig ein Hotelzimmer in London in einem anderen Hotelbuchungssystem reserviert. Diese beiden Operationen (Flugbuchung und Hotelreservierung) sollten idealerweise als eine einzige Transaktion behandelt werden. Wenn die Flugbuchung erfolgreich ist, die Hotelreservierung jedoch fehlschlägt, sollte das System idealerweise die Flugbuchung stornieren, um zu vermeiden, dass der Kunde ohne Unterkunft in London festsitzt. Dieses koordinierte Verhalten ist das Wesen einer verteilten Transaktion.

Einführung in das Two-Phase Commit (2PC) Protokoll

Das Two-Phase Commit (2PC)-Protokoll ist ein verteilter Algorithmus, der die Atomarität über mehrere Ressourcenmanager (z.B. Datenbanken) hinweg gewährleistet. Es umfasst einen zentralen Koordinator und mehrere Teilnehmer, von denen jeder für die Verwaltung einer spezifischen Ressource verantwortlich ist. Das Protokoll arbeitet in zwei verschiedenen Phasen:

Phase 1: Vorbereitungsphase

In dieser Phase initiiert der Koordinator die Transaktion und fordert jeden Teilnehmer auf, sich auf das Committen oder Rollback der Transaktion vorzubereiten. Die beteiligten Schritte sind wie folgt:

  1. Koordinator sendet eine Vorbereitungsanfrage: Der Koordinator sendet eine "Prepare"-Nachricht an alle Teilnehmer. Diese Nachricht signalisiert, dass der Koordinator bereit ist, die Transaktion zu committen, und fordert jeden Teilnehmer auf, sich darauf vorzubereiten.
  2. Teilnehmer bereiten sich vor und antworten: Jeder Teilnehmer empfängt die Vorbereitungsanfrage und führt die folgenden Aktionen aus:
    • Er unternimmt die notwendigen Schritte, um sicherzustellen, dass er die Transaktion entweder committen oder rückgängig machen kann (z.B. Schreiben von Redo/Undo-Protokollen).
    • Er sendet eine "Abstimmung" an den Koordinator zurück, die entweder "bereit zum Committen" (eine "Ja"-Stimme) oder "kann nicht committen" (eine "Nein"-Stimme) anzeigt. Eine "Nein"-Stimme könnte auf Ressourcenbeschränkungen, Datenvalidierungsfehler oder andere Fehler zurückzuführen sein.

Es ist entscheidend, dass die Teilnehmer garantieren, dass sie die Änderungen entweder committen oder rückgängig machen können, sobald sie mit "Ja" gestimmt haben. Dies beinhaltet in der Regel das Speichern der Änderungen auf einem stabilen Speichermedium (z.B. Festplatte).

Phase 2: Commit- oder Rollback-Phase

Diese Phase wird vom Koordinator basierend auf den in der Vorbereitungsphase von den Teilnehmern erhaltenen Stimmen eingeleitet. Es gibt zwei mögliche Ergebnisse:

Ergebnis 1: Commit

Wenn der Koordinator von allen Teilnehmern "Ja"-Stimmen erhält, fährt er mit dem Committen der Transaktion fort.

  1. Koordinator sendet eine Commit-Anfrage: Der Koordinator sendet eine "Commit"-Nachricht an alle Teilnehmer.
  2. Teilnehmer committen: Jeder Teilnehmer empfängt die Commit-Anfrage und wendet die mit der Transaktion verbundenen Änderungen dauerhaft auf seine Ressource an.
  3. Teilnehmer bestätigen: Jeder Teilnehmer sendet eine Bestätigungsnachricht an den Koordinator zurück, um zu bestätigen, dass der Commit-Vorgang erfolgreich war.
  4. Koordinator schließt ab: Nach Erhalt der Bestätigungen von allen Teilnehmern markiert der Koordinator die Transaktion als abgeschlossen.

Ergebnis 2: Rollback

Wenn der Koordinator auch nur eine einzige "Nein"-Stimme von einem Teilnehmer erhält oder wenn er eine Zeitüberschreitung beim Warten auf eine Antwort von einem Teilnehmer hat, entscheidet er, die Transaktion rückgängig zu machen (Rollback).

  1. Koordinator sendet eine Rollback-Anfrage: Der Koordinator sendet eine "Rollback"-Nachricht an alle Teilnehmer.
  2. Teilnehmer machen rückgängig: Jeder Teilnehmer empfängt die Rollback-Anfrage und macht alle Änderungen rückgängig, die zur Vorbereitung der Transaktion vorgenommen wurden.
  3. Teilnehmer bestätigen: Jeder Teilnehmer sendet eine Bestätigungsnachricht an den Koordinator zurück, um zu bestätigen, dass der Rollback-Vorgang erfolgreich war.
  4. Koordinator schließt ab: Nach Erhalt der Bestätigungen von allen Teilnehmern markiert der Koordinator die Transaktion als abgeschlossen.

Illustratives Beispiel: E-Commerce-Auftragsverarbeitung

Betrachten Sie ein E-Commerce-System, bei dem eine Bestellung die Aktualisierung der Bestandsdatenbank und die Abwicklung der Zahlung über ein separates Zahlungsgateway umfasst. Dies sind zwei separate Systeme, die an einer verteilten Transaktion teilnehmen müssen.

  1. Vorbereitungsphase:
    • Das E-Commerce-System (Koordinator) sendet eine Vorbereitungsanfrage an die Bestandsdatenbank und das Zahlungsgateway.
    • Die Bestandsdatenbank prüft, ob die angeforderten Artikel auf Lager sind und reserviert sie. Sie stimmt dann mit "Ja", wenn erfolgreich, oder mit "Nein", wenn die Artikel nicht auf Lager sind.
    • Das Zahlungsgateway autorisiert die Zahlung vorab. Es stimmt dann mit "Ja", wenn erfolgreich, oder mit "Nein", wenn die Autorisierung fehlschlägt (z.B. unzureichende Deckung).
  2. Commit-/Rollback-Phase:
    • Commit-Szenario: Wenn sowohl die Bestandsdatenbank als auch das Zahlungsgateway mit "Ja" stimmen, sendet der Koordinator eine Commit-Anfrage an beide. Die Bestandsdatenbank reduziert den Lagerbestand dauerhaft, und das Zahlungsgateway erfasst die Zahlung.
    • Rollback-Szenario: Wenn entweder die Bestandsdatenbank oder das Zahlungsgateway mit "Nein" stimmt, sendet der Koordinator eine Rollback-Anfrage an beide. Die Bestandsdatenbank gibt die reservierten Artikel frei, und das Zahlungsgateway macht die Vorabautorisierung ungültig.

Vorteile von Two-Phase Commit

Nachteile von Two-Phase Commit

Alternativen zu Two-Phase Commit

Aufgrund der Einschränkungen von 2PC sind mehrere alternative Ansätze zur Verwaltung verteilter Transaktionen entstanden. Dazu gehören:

Praktische Anwendungen von Two-Phase Commit

Trotz seiner Einschränkungen wird 2PC immer noch in verschiedenen Szenarien eingesetzt, in denen starke Konsistenz eine kritische Anforderung ist. Einige Beispiele sind:

Implementierung von Two-Phase Commit

Die Implementierung von 2PC erfordert sorgfältige Überlegung verschiedener Faktoren, darunter:

Globale Überlegungen für verteilte Transaktionen

Beim Entwurf und der Implementierung verteilter Transaktionen in einer globalen Umgebung müssen mehrere zusätzliche Faktoren berücksichtigt werden:

Fazit

Verteilte Transaktionen und das Two-Phase Commit (2PC)-Protokoll sind wesentliche Konzepte für den Aufbau robuster und konsistenter verteilter Systeme. Obwohl 2PC eine einfache und weit verbreitete Lösung zur Gewährleistung der Atomarität bietet, machen seine Einschränkungen, insbesondere hinsichtlich Blockierung und Single Point of Failure, eine sorgfältige Betrachtung alternativer Ansätze wie Sagas und eventueller Konsistenz erforderlich. Das Verständnis der Kompromisse zwischen starker Konsistenz, Verfügbarkeit und Leistung ist entscheidend für die Wahl des richtigen Ansatzes für Ihre spezifischen Anwendungsanforderungen. Darüber hinaus müssen beim Betrieb in einer globalen Umgebung zusätzliche Überlegungen hinsichtlich Netzwerklatenz, Zeitzonen, Datenlokalisierung und Einhaltung gesetzlicher Vorschriften berücksichtigt werden, um den Erfolg verteilter Transaktionen sicherzustellen.

Verteilte Transaktionen: Ein tiefer Einblick in Two-Phase Commit (2PC) | MLOG