12 Punkte von GN⁺ 2024-05-27 | 1 Kommentare | Auf WhatsApp teilen
  • 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:
    • Braid-Chrome
  • 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

 
GN⁺ 2024-05-27
Hacker-News-Diskussion

Zusammenfassung ausgewählter Hacker-News-Kommentare

  • Neue braid-text-Bibliothek angekündigt

    • Vorstellung einer Bibliothek, mit der sich kollaborative Bearbeitung leicht zu Web-Apps hinzufügen lässt.
    • Lässt sich einfach in Node.js-Apps integrieren und benötigt kein WebSocket.
    • Verwendet den Merge-Typ simpleton, sodass kein History-Overhead auf Client-Seite entsteht.
    • Über die Braid-Chrome-Erweiterung lässt sich der Versionsverlauf einsehen.
  • Keine Versionsnummer in der URL

    • Die Versionsnummer ist nicht in der URL enthalten, sondern wird in einem separaten Header übertragen.
    • Das Verlinken auf eine bestimmte Version ist schwierig.
    • Es wird hinterfragt, ob die Synchronisierung so eng an HTTP gekoppelt sein sollte.
  • Bestehende Standards statt HTTP-Erweiterung bevorzugt

    • Statt HTTP zu erweitern, könnte die Nutzung bestehender Standards sinnvoller sein.
    • Statt partial PUT wäre PATCH möglicherweise passender.
  • Vorteilhaft für verteilte Infrastruktur

    • Braid könnte die Kosten der Zustandsynchronisierung zwischen Geräten auch ohne Cloud senken.
    • Das ist vorteilhaft für dezentrale Infrastruktur.
  • Möglicherweise Ziel eines allgemeineren Event-Streamings

    • Änderungen einzelner Ressourcen können abonniert werden.
    • Es wird gefragt, ob damit ein allgemeineres Event-Streaming-Ziel verfolgt wird.
  • Vergleich mit WebDAV

    • Ähnlich wie WebDAV, aber mit leistungsfähigeren Funktionen.
    • Möglicherweise wäre es besser, eine Schicht über HTTP aufzubauen.
  • Fragen zu den Einsatzmöglichkeiten

    • Es wird gefragt, wofür diese Bibliothek genutzt werden kann.
    • Der Anwendungsfall ist nicht klar.
  • Verwandter Link

    • Ein Link zu „Braid: Synchronization for HTTP“ wird bereitgestellt.
  • Nur für Echtzeit oder nicht

    • Es wird gefragt, ob es nur für Echtzeit gedacht ist und ob es eine Funktion zur Bereinigung des Verlaufs gibt.
    • Es gibt Bedenken für Fälle, in denen Clients sich nur selten verbinden.
  • Eigenschaften von HTTP

    • HTTP ist ein Request-Response-Protokoll und behandelt keine Zustandsübertragung.
    • Die Beschreibung, dass Braid-HTTP zu einem Protokoll für Zustandssynchronisierung erweitert werde, wirkt seltsam.