Vorwort Es besteht kein Zweifel, dass MySQL Einzelmaschinentransaktionen gut unterstützt. Wie implementiert MySQL also verteilte Transaktionen in einem verteilten System mit mehreren Knoten? Wenn Sie beispielsweise ein Geschäftssystem entwickeln, akzeptiert es externe Anfragen und greift dann auf mehrere interne Systeme zu, um die Anfrage auszuführen. Während der Ausführung müssen wir die Werte mehrerer Datenbanken (D1, D2, D3) gleichzeitig aktualisieren. Da das System konsistent sein muss, müssen die Werte der drei Datenbanken entweder gleichzeitig erfolgreich aktualisiert oder überhaupt nicht aktualisiert werden. Andernfalls werden einige Anweisungen des Subsystems erfolgreich ausgeführt, während andere nicht ausgeführt werden. Dies führt zu Verwirrung beim Verständnis der Ergebnisse. Wie erreicht MySQL Konsistenz beim Aktualisieren mehrerer MySQL-Datenbanken? Das ist MySQL XA. MySQL implementiert den Betrieb mehrerer Datenbanken durch Unterstützung des Zwei-Phasen-Commit-Protokolls der XA-Spezifikation. XA-Protokoll Wenn wir die XA-Spezifikation erwähnen, müssen wir über das DTP-Modell (Distributed Transaction Processing) sprechen. Die XA-Spezifikation legt die Kommunikationsmethode zwischen den beiden Modulen im DTP-Modell fest: dem Transaktionsmanager und dem Ressourcenmanager. DTP ist eigentlich verteilte Transaktionsverarbeitung Die Funktionen der einzelnen Module sind wie folgt:
Dies ist möglicherweise zunächst schwer zu verstehen. Zusammenfassend lässt sich sagen, dass die Architektur darin besteht, dass Anwendungen auf vom Ressourcenmanager bereitgestellte gemeinsam genutzte Ressourcen zugreifen und diese verwenden und Transaktionsvorgänge über die vom Transaktionsmanager bereitgestellte Transaktionsschnittstelle (TX-Schnittstelle) definieren. Der Transaktionsmanager und die Ressourcenverwaltung führen das Zwei-Phasen-Commit-Protokoll basierend auf der XA-Spezifikation aus.
So implementieren Sie verteilte Transaktionen mit MySQL XAIn MySQL gibt es zwei Arten von XA-Transaktionen. Eine davon ist die interne XA-Transaktion, die hauptsächlich zur Koordination der Speicher-Engine und des Binärprotokolls verwendet wird. Die andere ist die externe Transaktion, die an externen verteilten Transaktionen teilnehmen kann (z. B. verteilte Transaktionen, die von mehreren Datenbanken implementiert werden). Hier diskutieren wir hauptsächlich externe Transaktionen. Hinweis: Verteilte Transaktionen können in MySQL nur verwendet werden, wenn die Isolationsebene auf „Serialisierbar“ eingestellt ist. XA {START|BEGIN} xid [TEILNEHMEN|FORTSETZEN] XA VORBEREITEN xid XA ENDE xid XA COMMIT xid[EINE PHASE] XA ROLLBACK xid XA WIEDERHERSTELLEN[XID KONVERTIEREN] Unter ihnen ist xid die Transaktions-ID, die einen Transaktionszweig eindeutig darstellt. Jeder Transaktionszweig hat eine ID. Stellen Sie die Isolationsebene auf serialisierbar ein Ausführungsergebnisse Rufen Sie zunächst den Befehl "XA START 'xid'" auf, um die XA-Transaktion in den Status ACTIVATE zu versetzen, und führen Sie dann die mehreren SQL-Anweisungen aus, aus denen die Transaktion besteht (z. B. update Als Nächstes können Sie für eine XA-Transaktion im IDLE-Status einen „XA PREPARE“-Befehl oder einen „XA COMMIT...ONE PHASE“-Befehl ausführen. Rufen Sie abschließend „XA COMMIT“ auf, um die Transaktion festzuschreiben (oder „XA ROLLBACK“, um die Transaktion rückgängig zu machen). Dadurch wird die Konsistenz globaler Transaktionen erreicht. Aus dem obigen Prozess können wir erkennen, dass bei verteilten Transaktionen der MySQL-Datenbank die Rolle von MySQL tatsächlich die des RM im XA-Transaktionsprozess ist und die des TM der mit dem MySQL-Server verbundene Client ist. An einer verteilten Transaktion sind im Allgemeinen mindestens zwei RMs beteiligt. Wenn wir also sagen, dass MySQL das XA-Protokoll unterstützt, beziehen wir uns auf MySQL als RM, was bedeutet, dass MySQL die Funktionen implementiert, die RM im XA-Protokoll haben sollte. Dies ist das Ende dieses Artikels zum Verständnis, wie MySQL XA verteilte Transaktionen implementiert. Weitere Informationen zu verteilten MySQL XA-Transaktionen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: 25 Möglichkeiten und Tipps zur Verbesserung der Ladegeschwindigkeit von Webseiten
>>: Detaillierte Erläuterung der JavaScript-Implementierung der Hash-Tabelle
Einführung Memcached ist ein verteiltes Caching-S...
Frage Nach dem Nginx-Reverse-Proxy erhält die Tom...
Probieren wir hier den Reverse-Proxy von Nginx au...
Docker empfiehlt offiziell, dass wir Port-Mapping...
Die Front- und Back-End-Ports von Vue sind inkons...
Als Neuling, der gerade mit dem Linux-System in K...
In der Open-Source-Umfrage von Black Duck aus dem...
Dieser Artikel stellt hauptsächlich die Analyse d...
Da immer mehr Docker-Images verwendet werden, mus...
Aufgrund der Anforderungen des Arbeitsprojekts is...
Dieser Artikel beschreibt anhand von Beispielen d...
transformieren und übersetzen Transformieren bezi...
Es gibt drei Möglichkeiten, Farben in HTML darzust...
Vorwort: Die MySQL-Datenbank bietet eine breite P...
Apache Tika ist eine Bibliothek zur Dateityperken...