Verteiltes DBMS - Commit-Protokolle
In einem lokalen Datenbanksystem muss der Transaktionsmanager zum Festschreiben einer Transaktion nur die Entscheidung zum Festschreiben an den Wiederherstellungsmanager übermitteln. In einem verteilten System sollte der Transaktionsmanager jedoch die Entscheidung zum Festschreiben an alle Server an den verschiedenen Standorten übermitteln, an denen die Transaktion ausgeführt wird, und die Entscheidung einheitlich durchsetzen. Wenn die Verarbeitung an jedem Standort abgeschlossen ist, erreicht sie den teilweise festgeschriebenen Transaktionsstatus und wartet, bis alle anderen Transaktionen ihren teilweise festgeschriebenen Status erreicht haben. Wenn die Nachricht empfangen wird, dass alle Sites zum Festschreiben bereit sind, beginnt das Festschreiben. In einem verteilten System werden entweder alle Sites festgeschrieben oder keiner von ihnen.
Die verschiedenen verteilten Festschreibungsprotokolle sind -
- Einphasiges Commit
- Zwei-Phasen-Commit
- Dreiphasiges Commit
Verteiltes einphasiges Commit
Das verteilte einphasige Festschreiben ist das einfachste Festschreibungsprotokoll. Nehmen wir an, es gibt eine steuernde Site und eine Reihe von Slave-Sites, an denen die Transaktion ausgeführt wird. Die Schritte beim verteilten Festschreiben sind:
Nachdem jeder Slave seine Transaktion lokal abgeschlossen hat, sendet er eine "DONE" -Nachricht an die steuernde Site.
Die Slaves warten auf die Nachricht "Commit" oder "Abort" von der steuernden Site. Diese Wartezeit wird aufgerufenwindow of vulnerability.
Wenn die steuernde Site von jedem Slave die Nachricht "FERTIG" empfängt, trifft sie eine Entscheidung zum Festschreiben oder Abbrechen. Dies wird als Festschreibungspunkt bezeichnet. Dann sendet es diese Nachricht an alle Slaves.
Beim Empfang dieser Nachricht legt ein Slave entweder fest oder bricht ab und sendet dann eine Bestätigungsnachricht an die steuernde Stelle.
Verteiltes zweiphasiges Commit
Das verteilte zweiphasige Festschreiben verringert die Anfälligkeit von einphasigen Festschreibungsprotokollen. Die in den beiden Phasen ausgeführten Schritte sind wie folgt:
Phase 1: Prepare Phase
Nachdem jeder Slave seine Transaktion lokal abgeschlossen hat, sendet er eine "FERTIG" -Nachricht an die steuernde Site. Wenn die steuernde Site von allen Slaves die Nachricht "FERTIG" erhalten hat, sendet sie eine Nachricht "Vorbereiten" an die Slaves.
Die Sklaven stimmen darüber ab, ob sie noch etwas begehen wollen oder nicht. Wenn ein Slave ein Commit durchführen möchte, sendet er eine "Bereit" -Nachricht.
Ein Slave, der kein Commit durchführen möchte, sendet eine Nachricht "Nicht bereit". Dies kann passieren, wenn der Slave widersprüchliche gleichzeitige Transaktionen hat oder eine Zeitüberschreitung vorliegt.
Phase 2: Commit/Abort Phase
Nachdem die steuernde Site von allen Slaves die Nachricht "Bereit" erhalten hat -
Die steuernde Site sendet eine "Global Commit" -Nachricht an die Slaves.
Die Slaves wenden die Transaktion an und senden eine "Commit ACK" -Nachricht an die steuernde Site.
Wenn die steuernde Site von allen Slaves die Nachricht "Commit ACK" empfängt, wird die Transaktion als festgeschrieben betrachtet.
Nachdem der steuernde Standort die erste Nachricht "Nicht bereit" von einem Slave erhalten hat -
Die steuernde Site sendet eine "Global Abort" -Nachricht an die Slaves.
Die Slaves brechen die Transaktion ab und senden eine "Abort ACK" -Nachricht an die steuernde Site.
Wenn die steuernde Site von allen Slaves die Nachricht "ACK abbrechen" empfängt, wird die Transaktion als abgebrochen betrachtet.
Verteiltes dreiphasiges Commit
Die Schritte beim verteilten dreiphasigen Festschreiben sind wie folgt:
Phase 1: Prepare Phase
Die Schritte sind die gleichen wie beim verteilten zweiphasigen Festschreiben.
Phase 2: Prepare to Commit Phase
- Die steuernde Site gibt eine Broadcast-Nachricht "Enter Prepared State" aus.
- Die Slave-Sites stimmen als Antwort mit „OK“ ab.
Phase 3: Commit / Abort Phase
Die Schritte sind die gleichen wie beim zweiphasigen Festschreiben, außer dass die Meldung "ACK festschreiben" / "ACK abbrechen" nicht erforderlich ist.