Dies ist eine maschinelle Übersetzung. Das Original in Englisch ist hier: Update 06 January, 2022
Allen ein frohes neues Jahr! Wir sitzen wieder im Sattel und können es kaum erwarten.
Vielen Dank an @josh für die Einrichtung des jüngsten Community-Testnetzes und an alle, die daran teilgenommen haben. Einige der gemeldeten Anomalien haben sich in unseren eigenen Testergebnissen widergespiegelt, und es gab auch ein paar Überraschungen, einschließlich der maximalen CPU-Spitzen, die wir jetzt untersuchen. Prost!
Nur eine kurze Nachricht diese Woche, um Sie wissen zu lassen, woran wir gerade arbeiten. Wir freuen uns, sagen zu können, dass wir bereits ein paar lose Enden geknüpft haben und bereit sind, loszulegen.
Allgemeiner Fortschritt
Im Laufe der Zeit haben wir verschiedene Möglichkeiten zur Berechnung des freien Speicherplatzes im Netzwerk in Erwägung gezogen. Kürzlich haben wir die wenigen db-Verzeichnisse durchlaufen und dir-Größen hinzugefügt, um den belegten Speicherplatz zu berechnen. Unter der Leitung von @anselme haben wir jetzt die Datenspeicherung vereinfacht, indem wir die erweiterte Datenbank entfernt und durch einen einfacheren Direct-to-Disk-Prozess mit einer binären Baumverzeichnisstruktur ersetzt haben. Dies erforderte, dass wir den Verzeichnistraversalprozess durch einen Prozess ersetzten, der jedes Byte zählt, während es geschrieben wird, und den gesamten belegten Speicherplatz verfolgt, was viel schneller und skalierbarer ist, da wir jetzt einen tiefen Baum von Verzeichnissen anstelle von einem oder zwei haben werden. Es wird auch den Prozess des Wiedereintritts eines Knotens mit Chunks in das Netzwerk erheblich vereinfachen, da wir ihn nicht jedes Mal messen müssen, und die Teilung von Abschnitten wird vereinfacht.
Anselme untersucht auch, wie sich der freiwerdende Speicherplatz beim Löschen privater Register (veränderliche Daten) einfach berechnen lässt.
Apropos veränderliche Daten: Wir haben darüber nachgedacht, welche Art von Gebühren an den Registerdatentyp angehängt werden sollten. Pay-per-Change wäre sehr umständlich, wir wollen Bearbeitungen vom DBC-Prozess trennen. Derzeit denken wir darüber nach, ein Vielfaches des Preises eines unveränderlichen Chunk (Blob)-PUT für einen Register-PUT zu berechnen und danach unbegrenzte Bearbeitungen durch den Dateneigentümer (und Parteien, mit denen sie teilen möchten) zuzulassen.
@bochaco hat den Mitgliedschaftsprozess weiter verfeinert, d.h. wie wir die korrekte Anzahl von Ältesten in einer Sektion beibehalten und wie wir der Sektion bei Bedarf neue Knoten für Erwachsene hinzufügen. Wenn ein neuer Knoten den Beitritt anfordert, startet er einen Prozess, der AE-Nachrichten und den Ressourcennachweistest enthält, und sobald die Ältesten zustimmen, ihn zu akzeptieren, wird eine Nachricht an den beitretenden Knoten zurückgesendet. Dieser Ablauf ist jetzt in die Kiste sn_membership integriert – zumindest für Erwachsene, die zu Ältesten befördert werden, und Älteste, die gehen. Dieser „sn-Mitgliedschafts“-Prozess geht jedoch derzeit davon aus, dass alle beteiligten Knoten stimmberechtigte Mitglieder (d. h. Älteste) sind, sodass die Beförderung eines Erwachsenen zu einem Ältesten ausgeschlossen ist. @bochaco und @davidrusu arbeiten gerade daran. Wir werden mehr in einem zukünftigen Update erklären.
Inzwischen hat @lionel.faber versucht, den CI/CD-Prozess mit selbst gehosteten GitHub-Runnern auf AWS. Native virtuelle Maschinen in GitHub-Aktionen können ziemlich langsam sein – insbesondere für Windows – was sich beim Testen als Engpass erwiesen hat. Indem wir den Service selbst auf AWS hosten, können wir leistungsfähigere VMs verwenden, um unsere Arbeitsabläufe schneller abzuschließen. Lionel dokumentiert auch den Distributed Key Generation (DKG)-Prozess, den wir für die Vereinbarung verwenden.
Bleiben wir noch einen Moment beim Testen, manchmal können Tests zu streng sein. Wieso das? Brunnentests sind so konzipiert, dass sie jeden Fehler abfangen, wenn sie auftreten, während ein fehlertolerantes Netzwerk mit CRDTs in der Lage sein kann, diese Störungen zu umgehen und schließlich zu einem garantiert konsistenten Zustand zu gelangen. Es kann also verschwenderisch sein, Tests zu erstellen, die alles erfassen – aber es ist ein kniffliger Balanceakt!
Ein typisches Beispiel ist ein fehlender Datenfehler, wie Sie ihn vielleicht im Testnet gesehen haben. Fehlen die Daten wirklich oder sind sie nur noch nicht angekommen? Vielleicht wird es später angezeigt, oder vielleicht ist es da, aber es ist ein anderer Fehler aufgetreten.
In diesem Szenario ist die Nachrichtenübermittlung zwischen den Akteuren ebenfalls nuanciert, und dies ist ein weiteres Diskussionsthema. Wenn ein Chunk erfolgreich abgelegt wurde, sollte dem Client (optional) mitgeteilt werden, dass er gespeichert wurde, und dank CRDTs sollte dies zu 100 % sicher sein, aber wenn er anscheinend „fehlgeschlagen“ ist, ist dies aufgrund von Asynchronität und anderem nicht zu 100 % sicher Faktoren, sodass der Kunde Optionen für das weitere Vorgehen benötigt.
@Qi_ma hat sich die Protokolle angesehen, um den Fehler wegen fehlender Daten aufzuspüren, und @yogesh untersucht den Grund für die Flut von AE-Nachrichten, die manchmal die Kommunikation zwischen Knoten überfordern. Sind sie verwandt? Wir sollten es bald wissen. In der Zwischenzeit hat @joshuef einen Fehler untersucht, der Probleme in Knoten verursachen könnte, die von Clients gehämmert werden, was dazu führt, dass der Speicher des Knotens ansteigt und sie gelegentlich zum Absturz bringt. Im Moment begrenzen wir das nur auf ein willkürliches Limit gleichzeitiger Client-Nachrichten, aber wir werden versuchen, dies basierend auf der Last des Knotens im weiteren Verlauf dynamisch zu gestalten.
Jeder Schritt ist ein andererIch trete näher.
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!