Frage

Im Rahmen einer verteilten Datenbank versuche ich zu verstehen, warum 2PC (wie in zB https://www.cs.princeton.edu/courses/archive/fall16/cos418/docs/l6-2pc.pdf ) ist besser als die Nach dem hypothetischen Protokoll zwischen einem Client, einem Master und einem Slave:

  • Der Kunde zeigt den Meister an, um sich zu verpflichten
  • Meister begeht es
  • Meister erzählt den Kunden, dass der Commission erfolgreich ist
  • Meister erzählt den Sklaven, um das Commit zu replizieren. Wenn der Slave fehlschlägt, versucht der Meister immer wieder, bis er erfolgreich ist, und den Sklaven bekommt alle Bearbeitungen.

Dies scheint mir, um die gleichen Eigenschaften wie 2PC zu befriedigen:

  • Sicherheit: Wenn der Meister begeht, wird der Slave auch verpflichten. Wenn der Slave begeht, muss der Master zuerst begangen haben. Ich vermutete, dass ein Vorteil von 2 Stück ist, dass, wenn ein Teilnehmer vor dem Beginn des Commits fehlschlägt, die Transaktion fehlgeschlagen ist, anstatt nur auf der TC zu begangen. Im vorgeschlagenen Protokoll gelangt das Commit on the Master jedoch anschließend den Sklaven.
  • liquivität: Dieses Protokoll hängt nicht.
  • beide verlassen sich auf den Master / TC, der dadurch die Entscheidung auf die Bekämpfung der Entscheidung aufgenommen hat. Beide gehen fehlgeschlagene Sklaven / Teilnehmer auf, wachen schließlich auf und fangen den Master / TC auf.
  • Beide schlägt fehl, wenn der Master / TC runter geht.
  • In beiden Protokollen ist es möglich, vorübergehende Inkonsistenzen zu haben, in denen der Master / TC eine Entscheidung abgeschlossen hat, aber die Sklaven / Teilnehmer haben noch nicht begangen.

Es scheint mir, dass der theoretische Theoretische Unterschied in 2 Stück ist, dass der Teilnehmer (Slave) "Nein" dem Commit stimmen kann, im Gegensatz dazu, nur vorübergehend nicht vorübergehend zu versagen. Das würde die Schlussfolgerung darüber brechen, wo der Sklave schließlich einholt. Ich verstehe jedoch nicht, warum der Sklave an erster Stelle "Nein" stimmen muss. Angesichts der Annahme, dass der Slave / Teilnehmer nicht dauerhaft fehlschlägt, scheint es entweder "Ja" zu wählen oder nicht zu antworten. (Im Gegensatz zum Beispiel des Bankkonto-Beispiels erwarte ich, dass der Slave den Master blind wiederholt.)

das destillieren alles destillieren, es scheint mir, dass die Annahme von 2 Stück nicht dauerhaft versagt, dass es unnötig macht, den Teilnehmern die Möglichkeit zu geben, "Nein" in der Phase "Phase" zu stimmen. < / p>

was fehlt ich hier? Vermutlich gibt es einen Vorteil von 2 stück über den oben genannten Vorteil, dass ich nicht verstehen kann, da 2PC tatsächlich zum Erstellen verteilter Datenbanken verwendet wird.

  • Bin ich falsch, als ob ein Sklave nicht ausdrücklich "Nein" stimmen muss, im Gegensatz zum vorübergehenden Versagen? (Ich spreche nur von dem Data Replication-Anwendungsfall, anstatt das BUBE-Konto Beispiele.)
  • Angesichts der gleichen Annahmen wie 2 Stück, und Annahme von Sklaven sagen nur: "Erfolg" oder "Wiederholen Sie es erneut", gibt es eine Garantie 2pc bietet, dass die naive Replikation darüber nicht tut?

Für den Zweck der Frage möchte ich gerne Praktiken ignorieren, es sei denn, sie sind für die Antwort kritisch. Insbesondere möchte ich Dinge ignorieren, die so interpretiert werden könnten, dass sie durch die No-Permanent-Fail-Annahme nicht zulässig, z. B. vollständige, voll konfigurierte Diskette, sklave, fehlerhafte, slave-beschädigte, Bedienerfehler, Buggy-Software usw. .

War es hilfreich?

Lösung

Sie verwechseln den Zweck der Algorithmen.Der 2PC ist ein Abstimmungsalgorithmus, in dem die beiden Seiten unterschiedliche Daten und unterschiedliche Kriterien für die Wahl einer Abstimmung aufweisen.Der Master-Slave ist ein Redundanzalgorithmus, der an zwei Stellen identische Kopien aufweisen soll.

Außerdem ist Ihr Master-Slave asynchron, wo Sie vor der Replikation zum Client zurückkehren.Der Client sieht den Abschluss an, der Master kann jedoch vor der Replikation immer wieder unabhängig werden, an welchem Punkt Sie Datenverlust haben.2 stück ist dies nicht unterliegen.

In diesem Fall können Organisationen 2pc verwenden, um den Master-Slave zu implementieren, indem der "Slave" immer stimmt.Dies ist im Wesentlichen Master-Slave im synchronen Modus mit unnötiger Nachrichtenaufwand.

Was Sie anwenden möchten, ist wahrscheinlich synchroner Master-Slave, wo Sie nach dem Slave nach dem Client zurückkehren.Es ist schneller als 2 Stück, da Sie nur einen Nachrichtenaustausch für jeden Slave benötigen, anstelle der für 2 Stück erforderlichen Austausch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit cs.stackexchange
scroll top