Schlossdesign
Verstehen Sie die Idee zur Schlossimplementierung: 1. Beginnen Sie damit, ein Verzeichnis als Lock (znode) zu erstellen, das üblicherweise verwendet wird, um die gesperrte Entität namens :/lock_node zu beschreiben 2. Der Client, der das Schloss erhalten möchte, erstellt einen Znode im Lock-Verzeichnis als Kindknoten des Locks/lock_node, und der Knotentyp ist Ordered Temporary Node (EPHEMERAL_SEQUENTIAL); Zum Beispiel erzeugen zwei Clients Znodes, /lock_node/lock-1 und /lock_node/lock-2 3. Der aktuelle Client ruft getChildren(/lock_node) auf, um alle Kindknoten des Lock-Verzeichnisses abzurufen, ohne Watch zu setzen, und dann die kleinen Bruderknoten zu erhalten (erstellt in Schritt 2). 4. Der Knoten, der in Schritt 3 kleiner als er selbst ist, existiert nicht & der kleinste Knoten ist derselbe wie der, der in Schritt 2 erstellt wurde, was darauf hinweist, dass die aktuelle Client-Sequenznummer die kleinste ist, hole die Sperre und beende. 5. Der Client überwacht den Zustand des geordneten temporären Knotens, der der nächstkleinste zu sich selbst ist 6. Wenn sich der Status des überwachten Unterknotens ändert, springen Sie zu Schritt 3 und setzen Sie die Nachverfolgungsoperationen fort, bis das Lock-Race beendet ist.
Der Autor wird hier die Verteilungssperre nicht einführen; schauen wir uns das Flussdiagramm des gesamten Codedesigns wie folgt an.
|