- Braid ist eine offene Arbeitsgruppe, die Algorithmen, Anwendungen, Tools und Standards für interoperable Zustandssynchronisation entwickelt.
- Ziel ist es, verteilte Zustände über Netzwerksysteme hinweg so einfach lesen und schreiben zu können wie lokale Variablen.
- In offenen Treffen alle zwei Wochen werden Anforderungen von Anwendungen und Systemen diskutiert, Gemeinsamkeiten identifiziert und Konsens über gemeinsame Protokolle gesucht.
Braid-HTTP: Synchronisation für HTTP
- Braid-HTTP ist eine Erweiterung, die HTTP von einem Protokoll zur Zustandsübertragung zu einem Protokoll zur Zustandssynchronisation verallgemeinert.
- Es ergänzt HTTP um folgende Funktionen:
- Versionsverwaltung für HTTP-Ressourcen
- Subscriptions für GET-Anfragen
- PATCH für Range-Anfragen
- Merge-Type zur Festlegung von OT- oder CRDT-Verhalten
- Mit diesen Funktionen können Webressourcen automatisch zwischen mehreren Clients, Servern und Proxys synchronisiert werden, und mehrere Autoren können gleichzeitig bearbeiten, wobei Konsistenz auch bei beliebiger Netzwerklatenz und Partitionierung gewährleistet bleibt.
- Webanwendungen können mit der Braid-Erweiterung kollaboratives Editieren, serverlosen Offline-Modus und P2P-Networking bereitstellen.
- Mit Standardbibliotheken lassen sich diese Funktionen einfach zu bestehenden Webanwendungen und Browsern hinzufügen.
- Weitere Details finden sich im IETF Internet-Draft.
Das Braid-Protokoll verwenden
- Braid ist mit dem heutigen Web kompatibel, funktioniert in aktuellen Browsern und lässt sich leicht zu bestehenden Webanwendungen hinzufügen.
- Es gibt Bibliotheken für verschiedene Sprachen:
- Javascript: braid-http, braid-protocol
- Haskell: wai-braid
- Lua: in Entwicklung von Paul Kulchenko
- In Chrome können Braid-Funktionen mit der Erweiterung Braid-Chrome genutzt werden.
Braid-Synchronisationsmodell
- Protokollimplementierungen:
- braid-http
- braid-protocol
- wai-braid
- Browser-Erweiterung:
- Bibliotheken zur Zustandsabstraktion:
- Braid-Text (für Text)
- Redwood
- Statebus
- Statecraft
- Algorithmen:
- Diamond Types: das schnellste Text-CRDT der Welt
- Antimatter: das erste Text-CRDT der Welt mit History Pruning
- Sync9: CRDT+OT für Text und JSON
- SyncX: Sync9
- Shelf: ein sehr einfaches und nützliches JSON-CRDT
- Diffsync: CRDT+OT mit rekursivem 3-Wege-Merge
- Tiny-Merge: eine gut gestaltete Bibliothek für praktische CRDTs
- CR-SQLite: macht aus SQLite ein sehr nützliches CRDT
- Portals: Copy-, Move- und Wrap-Operationen für jedes OT oder CRDT
- Simpleton: ein sehr einfacher, schneller und leichtgewichtiger Client für jedes CRDT
- Kompatibilität:
- Automerge-Kompatibilität
- ShareDB- und Sync9-Kompatibilität
Anwendungen
- Diese Website selbst
- Peery View: ein P2P-Reputationssystem auf Basis von Braid
- Quiet: P2P-Chat mit torDT
- Wiki
Zusammenarbeit
- Es ist eine offene Gruppe.
- Alle zwei Wochen findet ein allgemeines Treffen über einen Zoom-Link statt.
- Dort werden neue Fortschritte demonstriert, Standards diskutiert und Ansätze zum Aufbau des verteilten Webs besprochen.
- Zusätzlich werden regelmäßig Zwischentreffen zu speziellen Themen angesetzt.
Wie Standards entstehen
- Die Arbeit erfolgt öffentlich bei der IETF.
- Die Spezifikation wird in den Mailinglisten von Braid und HTTP diskutiert.
- Auf Github kann die Braid-Spezifikation bearbeitet werden.
- Bei Problemen kann ein Issue auf Github eingereicht werden.
- Wer eine Idee hat, kann sie in die Spezifikation schreiben und einen Pull Request einreichen.
- Wenn ein grober Konsens erreicht ist, wird der Pull Request angenommen.
- Wer über Standarddiskussionen auf dem Laufenden bleiben möchte, kann die Mailinglisten abonnieren und Github verfolgen.
- Wer Hilfe braucht, kann Michael Toomim per E-Mail kontaktieren.
Braid-Protokoll
- Das Braid-Protokoll ermöglicht es mehreren Synchronisationsalgorithmen, über ein gemeinsames Netzwerkprotokoll interoperabel zu sein.
- Die Synchronisationsmechanismen von heute verwenden unterschiedliche Protokolle, aber ihre Netzwerknachrichten transportieren Patches im Raum über Versionen in der Zeit, Positionen im Raum und Bereiche in der Zeit hinweg.
- Die Zusammensetzung von Patch-Mengen bildet eine mathematische Struktur, ein Geflecht.
- Das Braid-Protokoll ist ein standardisiertes Nachrichtenformat, mit dem alle Synchronisationsmechanismen Änderungen über die Zeit ausdrücken und zu einem konsistenten Zustand auflösen können.
- Interaktive Demos zum Erkunden des Datenmodells:
- Mit dem Braid interagieren
- Zufälliges Braid erzeugen
- Wer sich für Synchronisation über HTTP interessiert, kann die Protokollspezifikation prüfen und Feedback über die Mailingliste geben.
Protokoll-Roadmap
- Die aktuelle Braid-Spezifikation erweitert HTTP derzeit in zwei Synchronisationsdimensionen:
- Level 0: heutiges HTTP
- Level 1: Subscription mit Push-Updates
- Level 2: P2P-Konsistenz (Patches, Versionen, Merging)
- Darüber hinaus werden folgende P2P-Funktionen prototypisch umgesetzt, sind aber noch nicht standardisiert:
- Level 3: P2P-Semantik (Methoden, Validierung, Bestätigung)
- Level 4: P2P-Transport (URL, Naming, Verschlüsselung, Routing)
- Als Erklärung kann auf Mikes Präsentation in meeting-2 verwiesen werden.
- Zusammenarbeit in allen vier Bereichen ist willkommen.
Braid macht Synchronisationssysteme interoperabel
- Rafie Walker synchronisiert mit dem Braid-Protokoll ein OT-System und CRDTs.
- Es gibt einen Babelfish für WebSockets, der die Netzwerknachrichten von ShareDB in Braid-Nachrichten und umgekehrt übersetzt.
- Babelfish zwischen ShareDB und Sync9:
- Kann live ausprobiert werden.
- Dank an Seph Gentle für Einblicke in das ShareDB-Protokoll.
- Dieser Babelfish ist weitgehend fertig, behandelt aber keine Fälle, in denen zwei Synchronisationssysteme Konflikte in unterschiedlicher Sortierreihenfolge auflösen.
- Dafür muss derselbe Merge-Type implementiert werden (siehe Protokollspezifikation).
- Mit dem Design eines Babelfish für Automerge und andere CRDT-Systeme wurde ebenfalls begonnen.
- Wer ein Synchronisationssystem hat, kann gemeinsam an einer Braid-Kompatibilitätsschicht arbeiten.
Warum „Braid“?
- Braid fügt dem Web historische Zeitreisen hinzu, ähnlich wie das Videospiel Braid.
- Es verdreht jeden Strang des World Wide Web und macht das Web dicker, stärker und robuster.
- Es verwebt mehrere Perspektiven auf Synchronisation und verteilte Technologien in Webstandards.
- Ein Braid ist eine mathematische Struktur und zugleich eine Datenstruktur in der Informatik, die die für Synchronisation nötigen Informationen enthält.
- Indem Bearbeitungen als Patches eines Braid ausgedrückt werden, können mehrere Synchronisationssysteme interoperabel werden.
Meinung von GN⁺
- Das Braid-Protokoll ist ein leistungsfähiges Werkzeug, das verschiedene Synchronisationsalgorithmen integrieren kann und in verteilten Systemen sehr hilfreich dabei sein dürfte, Konsistenz zu wahren.
- Die Unterstützung sowohl von CRDT als auch von OT dürfte für Entwickler kollaborativer Anwendungen sehr nützlich sein.
- Die Erweiterungen von Braid-HTTP lassen sich leicht in bestehende Webanwendungen integrieren, sodass die Einführung neuer Technologien für Entwickler keine große Hürde darstellen dürfte.
- Die offenen Treffen von Braid fördern die Beteiligung der Community und bieten die Möglichkeit, durch die Aufnahme vielfältiger Meinungen bessere Standards zu schaffen.
- Die Unterstützung vieler Sprachen ermöglicht es Entwicklern, Braid in ihrer bevorzugten Sprache zu nutzen, und schafft so ein Umfeld, in dem sich mehr Entwickler beteiligen können.
1 Kommentare
Hacker-News-Diskussion
Zusammenfassung ausgewählter Hacker-News-Kommentare
Neue
braid-text-Bibliothek angekündigtsimpleton, sodass kein History-Overhead auf Client-Seite entsteht.Keine Versionsnummer in der URL
Bestehende Standards statt HTTP-Erweiterung bevorzugt
partial PUTwärePATCHmöglicherweise passender.Vorteilhaft für verteilte Infrastruktur
Möglicherweise Ziel eines allgemeineren Event-Streamings
Vergleich mit WebDAV
Fragen zu den Einsatzmöglichkeiten
Verwandter Link
Nur für Echtzeit oder nicht
Eigenschaften von HTTP