Dies ist eine maschinelle Übersetzung. Das Original in Englisch ist hier: Update 24 November, 2022
In Fortsetzung unserer Fortschritte bei der Anpassung dezentralisierter Netzwerkkonsensprotokolle für unsere Zwecke, in diesem Fall bei der Handhabung der Sektionsmitgliedschaft, führt uns Mostafa diese Woche durch ABBA und MVBA. ABBA ist ein Coin-Flipping-Protokoll für binäre Übereinstimmung. Wenn ein Abschnitt einen anderen Erwachsenen benötigt, können die Ältesten einen einzelnen Knoten auswählen, um einen Massenbeitritt zu verhindern, während MVBA verwendet wird, um zwischen konkurrierenden Vorschlägen zu entscheiden, z. B. welche Knoten in der nächsten Iteration des Abschnitts Älteste sein sollen.
Allgemeiner Fortschritt
@roland hat hart an einem neuen TestNetwork-Dienstprogramm gearbeitet, um die Einrichtung der Umgebung für Knotentests zu erleichtern. Wir können den Builder anweisen, ein Netzwerk mit einem bestimmten SAP in einem Präfix zu generieren, und es wird ein funktionales und konfigurierbares Netzwerk erstellt, in dem alle Lücken ausgefüllt sind wurde nach der bidirektionalen Stream-Arbeit, die für eine Weile festgefahren war, deaktiviert.
@chriso hat unser AWS-Setup aktualisiert und wir prüfen gerade, wie wir dies während PRs am besten nutzen können (um mehr Geschwindigkeit und Zuverlässigkeit für bestimmte Tests zu erhalten).
@joshuef und @roland reduzieren weiterhin die Anzahl der Schreibsperren, die wir für den Knotenstatus übernehmen. Dies sind Nachrichten, die zwischen Ältesten und Kunden, die sie kontaktieren, gesendet werden, um sicherzustellen, dass der Kunde aktuelle Informationen über die Sektion hat, bevor er versucht, eine Anfrage zu stellen. Diese Schreibsperren sind ein weiterer Ort, an dem wir die Codeausführung blockieren und einen Knoten verlangsamen können. Sie sind auch eine unnötige Komplikation und eine potenzielle Fehlerquelle. Wir sperren jetzt nur AE-Nachrichten, die uns eigentlich aktualisieren (vorher waren es alle AE-Nachrichten). Wir sperren auch nicht mehr während der Datenreplikation oder der Nachverfolgung von Funktionsstörungen. Wir sind also viel näher an einem schlanken/gesunden „Knoten“-Zustand, der nur „Schreib“-Zugriff für eine kleine Teilmenge von Aufgaben benötigt, die sich auf Netzwerkwissen beziehen
Zusätzlich zu dieser Arbeit arbeitet @bochaco auch an AE-Messaging und dem Entfernen redundanter Logik in der Client-AE-Handhabung.
ABBA und MVBA
ABBA-Protokoll
ABBA oder Asynchronous Binary Byzantine Agreement ist eine Möglichkeit, das Konsensproblem in asynchronen Netzwerken zu lösen. Insbesondere kann ABBA verwendet werden, um eine Ja/Nein-Frage als Gruppe zu entscheiden.
Bei diesem Protokoll beginnt jede Partei damit, ihre Präferenz (ja/nein) auszusenden. Wenn es keine Mehrheit für die initialisierten Werte gibt, starten die Parteien ein Schwellwert-Münzwurfschema, das ein zufälliges Ergebnis erzeugt, dem alle zustimmen können. ABBA ist ein nicht-deterministisches Protokoll, dessen Ausgabe eine Zufallszahl ist. Wenn wir die Eingabeereignisse wiederholen, erhalten wir möglicherweise eine andere Ausgabe.
Die Konsistenz wird durch VCBC sichergestellt. Wie letzte Woche behandelt, ist VCBC ein Broadcast-Protokoll, das versucht, eine Nachricht von einem Knoten an das Netzwerk zu verbreiten, wobei alle Knoten zustimmen auf der Nachricht, die der Knoten gesendet hat. Das VCBC-Protokoll kann modifiziert werden, um nur die gültigen und korrekten Vorschläge zu akzeptieren.
Wir verwenden VCBC, um sicherzustellen, dass die von Knoten gesendeten Nachrichten gültig sind. VCBC ist einfach eine Validierungsprüfung. Wenn also ein Ältester einen Vorschlag sendet, dass ein anderer Knoten in die Sektion aufgenommen werden soll, können sich die anderen Knoten vergewissern, dass der Älteste nicht korrupt oder fehlerhaft ist und der Vorschlag ernst genommen werden sollte.
Danach können wir ABBA-Runden verwenden, um uns durch ein Schwellensignaturschema zu einigen, das fortgesetzt wird, bis die Mehrheit der Ältesten einen Konsens erreicht. ABBA wird immer kündigen. Es wird immer ein zufälliger binärer Wert erzeugt, der verwendet wird, um die Entscheidung zu treffen. Wenn wir genügend Stimmen haben, können wir uns dem Vorschlag anschließen.
Die Reihenfolge der Ältesten ist wichtig. Stellen Sie sich vor, die Ältesten sind so geordnet: [3,5,7,2,1]
und 3 ist offline. Nach VCBC haben wir Vorschläge [-,P5,P7,P2,P1] Der erste Vorschlag ist P5. Wir betreiben ABBA für P5. Wir wissen, dass P5 gültig ist und alle Ältesten es haben (konsequent übertragen), daher sollte es nach einer Weile entschieden werden.
Der schwächere Gültigkeitsbegriff
Wir nehmen diese Vanilla-Algorithmen und verändern sie für unsere Zwecke. Da VCBC die Nachrichten bereits für uns validiert hat, können wir einfach verlangen, dass eine ehrliche Partei sich nur für einen Wert entscheiden darf, für den sie die zugehörigen Validierungsdaten hat. Sonst wird es abgelehnt.
Dadurch können wir das ABBA-Protokoll vereinfachen.
MVBA-Protokoll
Das Multi Values Byzantine Agreement Protocol (MVBA) wird verwendet, wenn es mehr als einen Vorschlag zur Konsensfindung gibt .
Wir können es verwenden, wenn mehrere Älteste gehen oder mehrere Erwachsene gleichzeitig für eine Beförderung in Frage kommen, sodass es eine Reihe möglicher Versionen der nächsten Iteration des Abschnitts gibt.
In diesem Szenario sendet jede Partei ihre Vorschläge konsequent über VCBC und nachdem sie genügend Vorschläge von ehrlichen Parteien (gültig) erhalten hat, beginnt das Protokoll mit der Ausführung einer binären Vereinbarung (unter Verwendung von ABBA) pro Vorschlag. Wenn der erste Vorschlag kommt decided der Prozess beendet.
Mitgliedschaftsproblem
Was versucht das alles zu lösen? Es geht um die Beförderung und Degradierung von Ältesten. Dieser Prozess muss mit Zustimmung einer großen Mehrheit der ehrlichen Ältesten geschehen, und wir wollen eine totale Ordnung vermeiden, da dies sehr rechenintensiv ist und nicht der Art und Weise entspricht, wie die Natur Dinge tut. Wir müssen auch ein hohes Maß an Parallelität (mehrere gleichzeitige Beitritte/Abgänge) bewältigen, ohne auf Bestellungen warten zu müssen, und in der Lage sein, Forks zu handhaben oder zu verbieten.
Unser Ansatz ist es, dieses Problem mit dem MVBA-Protokoll anzugehen. In diesem Szenario schlägt jeder Älteste eine Ansichtsliste der Ältesten vor, die nach der Änderung für die Sektion verantwortlich sein werden, und sendet sie an die anderen Ältesten. Dies wird fortgesetzt, bis die Mehrheit der Ältesten ausreichende Vorschläge von den anderen Parteien erhält. Danach wird unter Verwendung des ABBA-Protokolls über die Vorschläge abgestimmt, so dass eine endgültige Liste von Ältesten zufällig aus den vorgeschlagenen ausgewählt wird.
Wie Sie wissen, beschäftigen wir uns intensiv mit diesem Bereich, und es müssen Kompromisse und Entscheidungen getroffen werden. Eine Verbesserung, die wir vornehmen können, ist die Verwendung validierbarer Vorschläge. Die Mitgliedschaft ermöglicht es uns, dies zu tun und dadurch die Zeit bis zu einer Einigung zu verkürzen. Ein weiterer Bereich ist die Parallelität. Während die strenge Reihenfolge keine Parallelität zulässt, gibt es Optionen, dies sind komplexe Optionen, die zu berücksichtigen sind, aber wahrscheinlich wieder viel weniger Code. In jedem Fall ist es gut, Optionen zu haben, aber wenn wir diese Optionen auf den spezifischen Fall der Mitgliedschaft zuschneiden, haben wir viele Möglichkeiten, und wir können dann die Kompromisse in diesem Anwendungsfall mit größerer Gewissheit berücksichtigen.
Nützliche Links
Fühlen Sie sich frei, unten mit Links zu Übersetzungen dieses Entwicklungsupdates zu antworten, und die Moderatoren werden sie hier hinzufügen.
Als Open Source-Projekt sind wir immer auf der Suche nach Feedback, Kommentaren und Community-Beiträgen. Seien Sie also nicht schüchtern, machen Sie mit und lassen Sie uns gemeinsam das sichere Netzwerk erstellen!