Safe Network Entwickler Update 🇩🇪 03. November 2022

Dies ist eine maschinelle Übersetzung. Das Original in Englisch ist hier: Update 3 November, 2022

Jüngste Aktualisierungen zur Verarbeitung von Abwanderungsereignissen haben zu der Erkenntnis geführt, dass der benutzerdefinierte Prozess, den wir für den Genesis-Bereich eines Netzwerks hatten, nicht mehr erforderlich war. Weniger Komplexität bedeutet weniger Codepfade, was mehrere Vorteile mit sich bringt. @davidrusu erklärt weiter unten etwas ausführlicher.

Allgemeiner Fortschritt

Diese Woche sind wir mit der bidirektionalen Stream-Nutzung in Knoten weitergekommen, also haben wir jetzt den Fluss, der eine komplette Rundreise durchläuft … von „Kunde zu Ältestem zu Erwachsenem zu Ältestem zu Klient“ für eine „ACK“-Nachricht. Das heißt, 'ACK’s kommen jetzt nur herein, nach die Daten geschrieben wurden (während ‚main‘ ‚ACK‘ war, als die Nachricht bei den Ältesten empfangen wurde… Erwachsene waren nicht beteiligt). Dies umgeht während der Tests eine ganze Fehlerklasse und gibt uns mehr Vertrauen in das, was wir während der Datenspeicherung beim Client sehen.

Wir haben auch hart daran gearbeitet, mehr Codekomplexität umzugestalten. Eine PR von @anselme hat noch etwas DKG-Arbeit aufgeräumt. @roland hat mehr Testcode aufgeräumt und @bzee arbeitet hart an der Aktualisierung für die neueste Quinn-Kiste und ändert die Verwendung von Streams darin.

Die Genesis-Sektion weniger besonders machen

Es gibt ein paar Dinge, die den allerersten Abschnitt „Sicheres Netzwerk“ besonders machen, zum Beispiel ist es der einzige Abschnitt, der (offensichtlich) keinen übergeordneten Abschnitt hat. Aber wenn wir komplexe Systeme bauen, wollen wir nicht das Besondere. Es ist ein weiterer Fall, über den man nachdenken sollte.

Vor dieser Woche hatte die Art und Weise, wie Knoten dem Genesis-Abschnitt beitraten, eine Eigenart, bei der das Knotenalter künstlich aufgeblasen wurde. Früh beitretende Knoten begannen mit einem hohen Alter und verringerten das Alter für jeden später beitretenden Knoten zunehmend.

d.h.

  1. Knoten A versucht, mit dem standardmäßigen Knotenalter von 4 beizutreten
  2. Das Netzwerk antwortet mit einem Retry(age=97)
  3. Knoten A startet den Beitrittsprozess erneut mit 97 Jahren.
  4. Das Netzwerk akzeptiert sie.
  5. Knoten B versucht, sich mit dem standardmäßigen Knotenalter von 4 anzuschließen
  6. Das Netzwerk antwortet mit einem Retry(age=96) (das nächste Knotenalter wird niedriger gestuft)

In einer hektischen Herdensituation könnten viele Knoten versuchen, sich gleichzeitig anzuschließen, was eine große Alterssynchronisierung erzwingt:

  1. Die Knoten A, B, C, D versuchen gleichzeitig, sich mit dem standardmäßigen Knotenalter von 4 zu verbinden
  2. Das Netzwerk antwortet mit einem „Retry(age=97)“ auf alle.
  3. Die Knoten A, B, C, D starten den Beitrittsprozess erneut mit 97 Jahren.
  4. Angenommen, das Netzwerk akzeptiert Knoten A.
  5. Die Knoten B, C, D werden immer noch versuchen, sich mit dem Alter von 97 zu verbinden, sie müssen die Alterssynchronisierungslogik erneut durchlaufen

Der Grund, warum wir dies getan haben, war, frühzeitig übermäßige Umzüge im Netzwerk zu vermeiden. Wenn Sie sich erinnern, werden Knoten zufällig ausgewählt, um in andere Abschnitte verschoben zu werden, wenn ein Abwanderungsereignis eintritt. Je jünger ein Knoten war, desto wahrscheinlicher wird er für eine Verlagerung ausgewählt. Um zu vermeiden, dass 80 % Ihres Abschnitts auf einmal verlegt werden, haben wir dieses Altersstufenverhalten eingeführt, um die Wahrscheinlichkeit einer Verlegung zu verringern.

Irgendwann haben wir die Verarbeitung von Abwanderungsereignissen geändert, um die Anzahl der Knoten zu begrenzen, die gleichzeitig verschoben werden können, damit die Abschnitte eine gesunde Anzahl von Erwachsenen aufrechterhalten können.

Da die Gründe für das Age Stepping nun nicht mehr gelten, können wir das Alterssynchronisierungsprotokoll entfernen, wenn Knoten dem Genesis-Abschnitt beitreten. Dadurch verhält sich der erste Abschnitt viel näher an den nachfolgenden Abschnitten, ohne dass ihm spezielle Codepfade zugeordnet sind! Es sollte auch Node-Joins etwas zuverlässiger und schneller machen, da wir einen Netzwerk-Roundtrip entfernt haben, um das Join-Alter zu synchronisieren.


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!