Wenn ich richtig verstehe, möchten Sie, dass die Maschinen einen Wert teilen, und Sie möchten nicht, dass der Wert für immer gleich bleibt. Im Idealfall möchten Sie es nicht speichern.
Also, die "erste" Maschine einen zufälligen Wert beim Start zu generieren, (mit welcher Entropie kann es wie/dev/random. Wenn Sie nicht benötigen einen sicheren Wert, und nicht genug Entropie bei Starten Sie, um einen trotzdem zu erstellen, verwenden Sie die Zeit oder was auch immer), und kommunizieren Sie es mit allen anderen. Wenn neue Maschinen dem Cluster beitreten, müssen sie in der Lage sein, den Wert von einer Maschine zu finden, die sich bereits im Cluster befindet. Ausfallende Maschinen machen keinen Unterschied.
Welche Maschine ist die "erste"? Nun, wenn Sie immer eine Maschine vor allen anderen booten können, und geben Sie Zeit, um einen Wert zu generieren, dann können Sie den trivialen Algorithmus verwenden:
1) Suchen Sie nach anderen Maschinen. Wenn Sie einen finden, fragen Sie ihn nach dem Wert. 2) Wenn Sie keinen finden, generieren Sie den Wert selbst.
Wenn mehrere Maschinen gleichzeitig starten, müssen sie sich untereinander entscheiden, wer der "Führer" ist. Sie können dies tun, indem Sie eine selbst auswählen (zB eine Maschine erklärt sich selbst zum "Führer", sobald sie eine bestimmte Verbindung über die Admin-Schnittstelle erhält): Beim Start wartet jede Maschine, bis sie diese Verbindung erhält oder von einer anderen Maschine hört Maschine ist der Führer). Es ist trivial, das bei einem Token-Ring automatisch zu tun: der Rechner mit der geringsten MAC-Adresse oder was auch immer der Anführer ist. Aber niemand benutzt Token Ring mehr ...
Am entgegengesetzten Ende eines unzuverlässigen Netzwerkes bin ich mir nicht sicher, ob es überhaupt möglich ist, es sei denn, alle Maschinen wissen, wie viele es insgesamt gibt (in diesem Fall ist es einfach so der Token Ring, außer dass sie alle miteinander reden, bis sie herausgefunden haben, wer der Anführer ist). Mit der zuverlässigen Übertragung, die man in vernünftigen Grenzen auf dem Ethernet annehmen kann, bin ich mir sicher, dass irgendwo ein optimaler Algorithmus veröffentlicht wird, aber ich vergesse, was es ist (wenn ich es jemals wüsste). Ich nehme an, dass jeder in regelmäßigen Abständen seine Meinung über den Anführer ausstrahlt (einschließlich seiner eigenen Behauptung, wenn er noch keine bessere gesehen hat). Wenn du das lange genug gehört hast (ungefähr ein Intervall), wirst du wissen, wer der Anführer ist, und du kannst anfangen, den Samen zu benutzen.
Wenn der Wert ein Geheimnis ist, muss die Kommunikation innerhalb des Clusters sicher sein. Je nach Netzwerkarchitektur erhalten Sie das kostenlos.
Können Sie erklären, was der Punkt wäre? Wenn nicht jedes einzelne Farmmitglied dieselbe Sequenz von Zufallszahlengenerationen erstellt, werden sie aus der "Synchronisierung" aussteigen. Worum geht es also? – cletus
das ist GENAU meine Frage. Server 'A' erzeugt ein zufälliges Salz, das etwas hasht. Ergebnis geht an den Kunden. Der Client antwortet auf die Farm (übergibt die Warteschlange), trifft aber den Server "B". Server 'B' muss denselben Hash generieren (mit demselben Salt), um ihn mit Client-Hash-Daten zu vergleichen. –