12 points par GN⁺ 2024-05-27 | 1 commentaires | Partager sur WhatsApp
  • Braid est un groupe de travail ouvert qui crée des algorithmes, des applications, des outils et des standards pour une synchronisation d’état interopérable.
  • L’objectif est de rendre la lecture et l’écriture d’un état distribué, à l’échelle des systèmes de calcul en réseau, aussi simples que celles de variables locales.
  • Toutes les deux semaines, des réunions ouvertes permettent de discuter des exigences des applications et des systèmes, d’identifier les points communs et de trouver un consensus autour de protocoles partagés.

Braid-HTTP : la synchronisation pour HTTP

  • Braid-HTTP est une extension qui généralise HTTP, en le faisant passer d’un protocole de transfert d’état à un protocole de synchronisation d’état.
  • Elle ajoute les fonctionnalités suivantes à HTTP :
    • Gestion de versions des ressources HTTP
    • Abonnement (Subscription) aux requêtes GET
    • PATCH pour les requêtes Range
    • Merge-Type pour spécifier le comportement OT ou CRDT
  • Grâce à ces fonctionnalités, les ressources web peuvent se synchroniser automatiquement entre plusieurs clients, serveurs et proxys, et plusieurs auteurs peuvent éditer simultanément tout en garantissant la cohérence, même en présence de latence réseau arbitraire et de partitions.
  • Les applications web peuvent utiliser l’extension Braid pour offrir l’édition collaborative, un mode hors ligne serverless et le réseau P2P.
  • Les bibliothèques standard permettent d’ajouter facilement ces capacités aux applications web et navigateurs existants.
  • Plus de détails sont disponibles dans le brouillon Internet de l’IETF.

Utiliser le protocole Braid

  • Braid est compatible avec le web actuel, fonctionne dans les navigateurs d’aujourd’hui et peut être ajouté facilement aux applications web existantes.
  • Des bibliothèques existent pour plusieurs langages :
    • Javascript: braid-http, braid-protocol
    • Haskell: wai-braid
    • Lua: en cours de développement par Paul Kulchenko
  • Dans Chrome, les fonctionnalités de Braid peuvent être utilisées via l’extension Braid-Chrome.

Modèle de synchronisation de Braid

  • Implémentations du protocole :
    • braid-http
    • braid-protocol
    • wai-braid
  • Extension de navigateur :
    • Braid-Chrome
  • Bibliothèques d’abstraction d’état :
    • Braid-Text (pour le texte)
    • Redwood
    • Statebus
    • Statecraft
  • Algorithmes :
    • Diamond Types: le CRDT de texte le plus rapide au monde
    • Antimatter: le premier CRDT de texte au monde avec élagage d’historique
    • Sync9: CRDT+OT pour le texte et JSON
    • SyncX: Sync9
    • Shelf: un CRDT JSON très simple et utile
    • Diffsync: CRDT+OT utilisant une fusion récursive à 3 voies
    • Tiny-Merge: une bibliothèque de CRDT pratique et bien conçue
    • CR-SQLite: transforme SQLite en un CRDT extrêmement utile
    • Portals: opérations de copie, déplacement et encapsulation pour tout OT ou CRDT
    • Simpleton: un client léger, très simple et rapide, pour tous les CRDT
  • Compatibilité :
    • Compatibilité avec Automerge
    • Compatibilité avec ShareDB et Sync9

Applications

  • Ce site web lui-même
  • Peery View: système de réputation P2P basé sur Braid
  • Quiet: chat P2P utilisant torDT
  • Wiki

Travailler ensemble

  • C’est un groupe ouvert.
  • Une réunion générale a lieu toutes les deux semaines via un lien Zoom.
  • Les nouvelles avancées y sont présentées en démo, les standards y sont discutés et les approches de construction du web distribué y sont examinées.
  • Des réunions intermédiaires sur des sujets spécifiques sont aussi ajoutées régulièrement au calendrier.

Comment les standards sont créés

  • Le travail se fait publiquement à l’IETF.
  • Les spécifications sont discutées sur les listes de diffusion de Braid et de HTTP.
  • Il est possible d’éditer la spécification Braid sur Github.
  • En cas de problème, on peut soumettre un ticket sur Github.
  • En cas d’idée, on peut l’écrire dans la spécification et ouvrir une Pull Request.
  • Une fois un consensus approximatif atteint, la Pull Request est acceptée.
  • Pour suivre les discussions sur les standards, on peut s’abonner aux listes de diffusion et suivre Github.
  • En cas de besoin d’aide, il est possible d’envoyer un e-mail à Michael Toomim.

Le protocole Braid

  • Le protocole Braid permet à plusieurs algorithmes de synchronisation d’interopérer via un protocole réseau commun.
  • Les mécanismes de synchronisation actuels utilisent aujourd’hui des protocoles différents, mais leurs messages réseau transportent des patchs de l’espace à travers des versions du temps, des positions dans l’espace et des plages temporelles.
  • La composition d’un ensemble de patchs forme une tresse, une structure mathématique.
  • Le protocole Braid est un format de message standard qui permet à tous les mécanismes de synchronisation d’exprimer les changements dans le temps et de les résoudre vers un état cohérent.
  • Démos interactives pour explorer le modèle de données :
    • Interagir avec une tresse
    • Générer une tresse aléatoire
  • Si la synchronisation sur HTTP vous intéresse, vous pouvez consulter la spécification du protocole et donner votre avis sur la liste de diffusion.

Feuille de route du protocole

  • La spécification actuelle de Braid étend HTTP selon deux dimensions de synchronisation :
    • Niveau 0: le HTTP d’aujourd’hui
    • Niveau 1: abonnements avec mises à jour push
    • Niveau 2: cohérence P2P (patchs, versions, fusion)
  • Les fonctionnalités P2P suivantes sont également en cours de prototypage, mais ne sont pas encore standardisées :
    • Niveau 3: sémantique P2P (méthodes, validation, confirmation)
    • Niveau 4: transport P2P (URL, nommage, chiffrement, routage)
  • Pour les explications, on peut se référer à la présentation de Mike dans meeting-2.
  • La collaboration est bienvenue dans ces quatre domaines.

Braid rend les mécanismes de synchronisation interopérables

  • Rafie Walker synchronise des systèmes OT et des CRDT à l’aide du protocole Braid.
  • Un babel fish sur WebSocket convertit les messages réseau de ShareDB en messages Braid, et inversement.
  • Babel fish entre ShareDB et Sync9 :
    • Il peut être essayé en direct.
    • Merci à Seph Gentle pour ses éclairages sur le protocole ShareDB.
    • Ce babel fish est presque terminé, mais il ne gère pas les cas où deux mécanismes de synchronisation résolvent les conflits selon des ordres de tri différents.
    • Pour cela, il faut implémenter le même type de fusion (voir la spécification du protocole).
  • La conception d’un babel fish pour Automerge, un système CRDT, a également commencé.
  • Si vous avez un mécanisme de synchronisation, il est possible de collaborer pour développer une couche de compatibilité Braid.

Pourquoi « Braid » ?

  • Braid ajoute au web un voyage historique dans le temps, comme le jeu vidéo Braid.
  • Il tresse chaque brin du World Wide Web pour rendre le web plus épais, plus puissant et plus robuste.
  • Il tisse ensemble plusieurs points de vue sur les technologies de synchronisation et de distribution dans les standards du web.
  • Une tresse est à la fois une structure mathématique et une structure de données informatique contenant les informations dont les mécanismes de synchronisation ont besoin.
  • En représentant les modifications comme des patchs d’une tresse, plusieurs mécanismes de synchronisation peuvent interopérer.

L’avis de GN⁺

  • Le protocole Braid est un outil puissant capable d’unifier différents algorithmes de synchronisation, ce qui peut grandement aider à maintenir la cohérence dans les systèmes distribués.
  • Le fait de prendre en charge à la fois les CRDT et OT sera très utile aux développeurs d’applications collaboratives.
  • L’extension de Braid-HTTP peut s’intégrer facilement aux applications web existantes, ce qui limite fortement les barrières à l’adoption pour les développeurs.
  • Les réunions ouvertes de Braid encouragent la participation de la communauté et offrent l’occasion de créer de meilleurs standards en intégrant des points de vue variés.
  • La prise en charge de plusieurs langages permet aux développeurs d’utiliser Braid dans leur langage préféré, ce qui favorise la participation d’un plus grand nombre d’entre eux.

1 commentaires

 
GN⁺ 2024-05-27
Avis Hacker News

Résumé des commentaires de Hacker News

  • Nouvelle bibliothèque braid-text bientôt disponible

    • Présentation d’une bibliothèque qui permet d’ajouter facilement l’édition collaborative à des applications web.
    • Peut être ajoutée simplement à une application Node.js, sans nécessiter WebSocket.
    • Utilise le type de fusion simpleton, sans surcharge d’historique côté client.
    • Permet de consulter l’historique des versions via l’extension Braid-Chrome.
  • Pas de numéro de version dans l’URL

    • Le numéro de version n’est pas inclus dans l’URL, mais envoyé dans un en-tête séparé.
    • Cela rend difficile la création d’un lien vers une version précise.
    • Certains s’interrogent sur la nécessité de lier aussi étroitement la synchronisation à HTTP.
  • Préférence pour les standards existants plutôt qu’une extension de HTTP

    • Il pourrait être préférable d’utiliser les standards existants plutôt que d’étendre HTTP.
    • Utiliser PATCH au lieu de partial PUT pourrait être plus approprié.
  • Avantageux pour une infrastructure distribuée

    • Braid pourrait réduire le coût de synchronisation d’état entre appareils, même sans cloud.
    • Cela serait favorable à une infrastructure décentralisée.
  • Possibilité d’un objectif plus général de streaming d’événements

    • Il est possible de s’abonner aux changements de ressources individuelles.
    • Des questions sont posées sur la possibilité d’un objectif plus général de streaming d’événements.
  • Comparaison avec WebDAV

    • Similaire à WebDAV, mais avec des fonctionnalités plus puissantes.
    • Il pourrait être préférable d’ajouter une couche au-dessus de HTTP.
  • Questions sur les cas d’usage

    • Des questions sont posées sur les usages possibles de cette bibliothèque.
    • Le cas d’usage n’est pas clairement défini.
  • Liens associés

    • Fournit des liens associés à Braid: Synchronization for HTTP.
  • Usage réservé au temps réel ?

    • Questions sur le fait de savoir si c’est uniquement pour le temps réel et s’il existe une fonction de nettoyage de l’historique.
    • Inquiétudes concernant les cas où le client se connecte rarement.
  • Les caractéristiques de HTTP

    • HTTP est un protocole requête-réponse qui ne traite pas le transfert d’état.
    • L’idée que Braid-HTTP soit présenté comme une extension en protocole de synchronisation d’état semble étrange.