12 puntos por GN⁺ 2024-05-27 | 1 comentarios | Compartir por WhatsApp
  • Braid es un grupo de trabajo abierto que crea algoritmos, aplicaciones, herramientas y estándares para la sincronización de estado interoperable.
  • Su objetivo es hacer que leer y escribir estado distribuido en sistemas de cómputo en red sea tan fácil como usar variables locales.
  • Cada dos semanas, mediante reuniones abiertas, discuten los requisitos de aplicaciones y sistemas, identifican puntos en común y buscan consenso sobre protocolos compartidos.

Braid-HTTP: sincronización para HTTP

  • Braid-HTTP es una extensión que generaliza HTTP de un protocolo de transferencia de estado a un protocolo de sincronización de estado.
  • Agrega las siguientes funciones a HTTP:
    • Control de versiones de recursos HTTP
    • Suscripción (Subscription) para solicitudes GET
    • PATCH para solicitudes Range
    • Merge-Type para especificar operaciones OT o CRDT
  • Estas funciones permiten que los recursos web se sincronicen automáticamente entre múltiples clientes, servidores y proxies, y que varios autores editen al mismo tiempo garantizando consistencia incluso con latencia y particiones arbitrarias de red.
  • Las aplicaciones web pueden usar la extensión Braid para ofrecer edición colaborativa, modo offline serverless y redes P2P.
  • Con las bibliotecas estándar, estas capacidades pueden añadirse fácilmente a aplicaciones web y navegadores existentes.
  • Más detalles pueden consultarse en el borrador de Internet del IETF.

Uso del protocolo Braid

  • Braid es compatible con la web actual, funciona en los navegadores actuales y puede añadirse fácilmente a aplicaciones web existentes.
  • Hay bibliotecas para varios lenguajes:
    • Javascript: braid-http, braid-protocol
    • Haskell: wai-braid
    • Lua: en desarrollo por Paul Kulchenko
  • En Chrome, se puede usar la funcionalidad de Braid mediante la extensión Braid-Chrome.

Modelo de sincronización de Braid

  • Implementaciones del protocolo:
    • braid-http
    • braid-protocol
    • wai-braid
  • Extensión del navegador:
    • Braid-Chrome
  • Bibliotecas de abstracción de estado:
    • Braid-Text (para texto)
    • Redwood
    • Statebus
    • Statecraft
  • Algoritmos:
    • Diamond Types: el CRDT de texto más rápido del mundo
    • Antimatter: el primer CRDT de texto del mundo con poda de historial
    • Sync9: CRDT+OT para texto y JSON
    • SyncX: Sync9
    • Shelf: un CRDT para JSON muy simple y útil
    • Diffsync: CRDT+OT que usa merge recursivo de 3 vías
    • Tiny-Merge: una biblioteca bien diseñada de CRDT práctico
    • CR-SQLite: convierte SQLite en un CRDT muy útil
    • Portals: operaciones de copiar, mover y envolver para cualquier OT o CRDT
    • Simpleton: un cliente ligero muy simple y rápido para cualquier CRDT
  • Compatibilidad:
    • Compatibilidad con Automerge
    • Compatibilidad con ShareDB y Sync9

Aplicaciones

  • Este mismo sitio web
  • Peery View: sistema de reputación P2P basado en Braid
  • Quiet: chat P2P usando torDT
  • Wiki

Trabajar juntos

  • Es un grupo abierto.
  • Tiene reuniones generales cada dos semanas mediante un enlace de Zoom.
  • Presentan demos de nuevos avances, discuten estándares y analizan enfoques para construir una web distribuida.
  • También se agregan periódicamente al calendario reuniones intermedias sobre temas especiales.

Cómo se crean los estándares

  • El trabajo se realiza públicamente en el IETF.
  • Las especificaciones se discuten en las listas de correo de Braid y HTTP.
  • La especificación de Braid puede editarse en Github.
  • Si hay un problema, se puede abrir un issue en Github.
  • Si hay una idea, se puede escribir en la especificación y enviar un Pull Request.
  • Cuando se alcanza un consenso general, el Pull Request es aceptado.
  • Para mantenerse al día con las discusiones del estándar, se puede suscribir a la lista de correo y seguir Github.
  • Si se necesita ayuda, se puede enviar un correo a Michael Toomim.

Protocolo Braid

  • El protocolo Braid permite que varios algoritmos de sincronización interoperen mediante un protocolo de red común.
  • Los mecanismos de sincronización actuales usan protocolos distintos, pero sus mensajes de red transmiten parches de espacio a lo largo de versiones en el tiempo, posiciones en el espacio y rangos en el tiempo.
  • La composición del conjunto de parches forma una estructura matemática llamada braid.
  • El protocolo Braid es un formato estándar de mensajes con el que cualquier mecanismo de sincronización puede expresar cambios en el tiempo y resolverlos en un estado consistente.
  • Demo interactiva para explorar el modelo de datos:
    • Interactuar con braid
    • Generar braid aleatorio
  • Si te interesa la sincronización sobre HTTP, puedes revisar la especificación del protocolo y dar tu opinión en la lista de correo.

Hoja de ruta del protocolo

  • La especificación actual de Braid extiende HTTP en dos dimensiones de sincronización:
    • Nivel 0: HTTP actual
    • Nivel 1: suscripción con actualizaciones push
    • Nivel 2: consistencia P2P (parches, versiones, merge)
  • También se están prototipando las siguientes funciones P2P, aunque aún no están estandarizadas:
    • Nivel 3: semántica P2P (métodos, validación, confirmación)
    • Nivel 4: transporte P2P (URL, nombres, cifrado, routing)
  • Para una explicación, puede consultarse la presentación de Mike en meeting-2.
  • Se agradece la colaboración en las cuatro áreas.

Braid hace interoperables a los mecanismos de sincronización

  • Rafie Walker sincroniza sistemas OT y CRDT usando el protocolo Braid.
  • Hay un babelfish en WebSocket que convierte los mensajes de red de ShareDB en mensajes Braid y viceversa.
  • Babelfish entre ShareDB y Sync9:
    • Se puede probar en vivo.
    • Gracias a Seph Gentle por aportar ideas sobre el protocolo de ShareDB.
    • Este babelfish está casi completo, pero no maneja los casos en que dos mecanismos de sincronización resuelven conflictos con órdenes distintos.
    • Para eso, deben implementar el mismo tipo de merge (ver la especificación del protocolo).
  • También se empezó a diseñar un babelfish para Automerge, un sistema CRDT.
  • Si tienes un mecanismo de sincronización, pueden trabajar juntos para desarrollar una capa de compatibilidad con Braid.

¿Por qué "Braid"?

  • Braid añade viajes históricos en el tiempo a la web, como el videojuego Braid.
  • Retuerce cada hebra de la World Wide Web para hacerla más gruesa, poderosa y resistente.
  • Entreteje múltiples perspectivas sobre sincronización y tecnologías distribuidas en los estándares web.
  • Un braid es una estructura matemática y una estructura de datos informática que contiene la información necesaria para los mecanismos de sincronización.
  • Al representar las ediciones como parches de un braid, varios mecanismos de sincronización pueden interoperar.

Opinión de GN⁺

  • El protocolo Braid es una herramienta potente para integrar diversos algoritmos de sincronización y puede ser de gran ayuda para mantener consistencia en sistemas distribuidos.
  • El hecho de que soporte tanto CRDT como OT será muy útil para desarrolladores de aplicaciones colaborativas.
  • La extensión de Braid-HTTP puede integrarse fácilmente en aplicaciones web existentes, por lo que no representará una gran barrera para adoptar nueva tecnología.
  • Las reuniones abiertas de Braid fomentan la participación de la comunidad y ofrecen una oportunidad para crear mejores estándares incorporando distintas perspectivas.
  • El soporte para varios lenguajes permite a los desarrolladores usar Braid en su lenguaje preferido, creando un entorno en el que más personas pueden participar.

1 comentarios

 
GN⁺ 2024-05-27
Opiniones en Hacker News

Resumen de comentarios de Hacker News

  • Próximo lanzamiento de la nueva biblioteca braid-text

    • Presentación de una biblioteca que permite agregar fácilmente edición colaborativa a aplicaciones web.
    • Se puede añadir fácilmente a apps de Node.js y no requiere WebSocket.
    • Usa el tipo de fusión simpleton, por lo que no hay sobrecarga de historial en el cliente.
    • Es posible revisar el historial de versiones mediante la extensión Braid-Chrome.
  • No incluye números de versión en la URL

    • Los números de versión no se incluyen en la URL, sino que se envían en encabezados separados.
    • Esto dificulta enlazar a una versión específica.
    • Se cuestiona si la sincronización debe estar tan estrechamente ligada a HTTP.
  • Preferencia por usar estándares existentes en lugar de extender HTTP

    • En vez de extender HTTP, podría ser mejor usar estándares ya existentes.
    • Usar PATCH en lugar de partial PUT podría ser más apropiado.
  • Ventajoso para infraestructura distribuida

    • Braid podría reducir el costo de sincronizar estado entre dispositivos incluso sin la nube.
    • Resulta favorable para infraestructura descentralizada.
  • Posibilidad de apuntar a un objetivo más general de transmisión de eventos

    • Permite suscribirse a cambios en recursos individuales.
    • Surge la pregunta de si apunta a un objetivo más general de streaming de eventos.
  • Comparación con WebDAV

    • Se parece a WebDAV, pero ofrece funciones más potentes.
    • Podría ser mejor construir una capa sobre HTTP.
  • Pregunta sobre casos de uso

    • Se pregunta en qué se podría usar esta biblioteca.
    • Los casos de uso no están claros.
  • Enlace relacionado

    • Se proporciona un enlace relacionado con Braid: Synchronization for HTTP.
  • Si es solo para tiempo real

    • Se pregunta si es exclusivo para tiempo real y si tiene una función de limpieza de historial.
    • Hay preocupación por los casos en que el cliente se conecta con poca frecuencia.
  • Características de HTTP

    • HTTP es un protocolo de solicitud-respuesta y no maneja transferencia de estado.
    • Parece extraño describir Braid-HTTP como una extensión hacia un protocolo de sincronización de estado.