- Braid é um grupo de trabalho aberto que cria algoritmos, aplicações, ferramentas e padrões para sincronização de estado interoperável.
- O objetivo é tornar a leitura e a escrita de estado distribuído em sistemas de computação em rede tão fáceis quanto usar variáveis locais.
- A cada duas semanas, o grupo realiza reuniões abertas para discutir requisitos de aplicações e sistemas, identificar pontos em comum e buscar consenso sobre protocolos compartilhados.
Braid-HTTP: sincronização para HTTP
- Braid-HTTP é uma extensão que generaliza o HTTP de um protocolo de transferência de estado para um protocolo de sincronização de estado.
- Ele adiciona os seguintes recursos ao HTTP:
- Controle de versão de recursos HTTP
- Assinatura (Subscription) para requisições GET
- PATCH para requisições Range
- Merge-Type para especificar operações OT ou CRDT
- Com esses recursos, os recursos da web são sincronizados automaticamente entre vários clientes, servidores e proxies, e vários autores podem editar ao mesmo tempo com garantia de consistência, mesmo sob latência de rede arbitrária e partições.
- Aplicações web podem usar as extensões do Braid para oferecer edição colaborativa, modo offline serverless e rede P2P.
- Com bibliotecas padrão, é possível adicionar esses recursos facilmente a aplicações web e navegadores existentes.
- Mais detalhes podem ser encontrados no rascunho da Internet da IETF.
Usando o protocolo Braid
- Braid é compatível com a web atual, funciona nos navegadores atuais e pode ser adicionado facilmente a aplicações web existentes.
- Há bibliotecas para várias linguagens:
- Javascript: braid-http, braid-protocol
- Haskell: wai-braid
- Lua: em desenvolvimento por Paul Kulchenko
- No Chrome, é possível usar os recursos do Braid com a extensão Braid-Chrome.
Modelo de sincronização do Braid
- Implementações de protocolo:
- braid-http
- braid-protocol
- wai-braid
- Extensão de navegador:
- Bibliotecas de abstração de estado:
- Braid-Text (para texto)
- Redwood
- Statebus
- Statecraft
- Algoritmos:
- Diamond Types: o CRDT de texto mais rápido do mundo
- Antimatter: o primeiro CRDT de texto do mundo com pruning de histórico
- Sync9: CRDT+OT para texto e JSON
- SyncX: Sync9
- Shelf: um CRDT de JSON muito simples e útil
- Diffsync: CRDT+OT usando merge recursivo de 3 vias
- Tiny-Merge: uma biblioteca bem projetada de CRDTs práticos
- CR-SQLite: transforma o SQLite em um CRDT muito útil
- Portals: operações de copiar, mover e envolver para qualquer OT ou CRDT
- Simpleton: um cliente leve, muito simples e rápido para qualquer CRDT
- Compatibilidade:
- Compatibilidade com Automerge
- Compatibilidade com ShareDB e Sync9
Aplicações
- Este próprio site
- Peery View: sistema de reputação P2P baseado em Braid
- Quiet: chat P2P usando torDT
- Wiki
Trabalhando juntos
- É um grupo aberto.
- Há reuniões gerais a cada duas semanas por meio de um link no Zoom.
- O grupo apresenta novas evoluções, discute padrões e debate abordagens para construir a web distribuída.
- Reuniões intermediárias sobre temas especiais também são adicionadas regularmente à agenda.
Como fazer padrões
- O trabalho é feito publicamente na IETF.
- As especificações são discutidas nas listas de e-mail do Braid e do HTTP.
- É possível editar a especificação do Braid no Github.
- Se houver um problema, é possível abrir uma issue no Github.
- Se houver uma ideia, é possível escrevê-la na especificação e abrir um Pull Request.
- Quando se chega a um consenso aproximado, o Pull Request é aceito.
- Para acompanhar as discussões sobre o padrão, é possível assinar a lista de e-mail e acompanhar o Github.
- Se precisar de ajuda, é possível enviar um e-mail para Michael Toomim.
Protocolo Braid
- O protocolo Braid permite que vários algoritmos de sincronização interoperem por meio de um protocolo de rede comum.
- Os mecanismos de sincronização de hoje usam protocolos diferentes, mas suas mensagens de rede carregam patches do espaço ao longo de versões do tempo, posições no espaço e intervalos no tempo.
- A composição de um conjunto de patches forma uma trança, uma estrutura matemática.
- O protocolo Braid é um formato de mensagem padrão que permite que qualquer mecanismo de sincronização expresse mudanças ao longo do tempo e as resolva em um estado consistente.
- Demos interativas para explorar o modelo de dados:
- Interagir com uma braid
- Gerar uma braid aleatória
- Se você se interessa por sincronização via HTTP, pode revisar a especificação do protocolo e enviar opiniões para a lista de e-mail.
Roadmap do protocolo
- Atualmente, a especificação do Braid estende o HTTP em duas dimensões de sincronização:
- Nível 0: HTTP atual
- Nível 1: assinaturas com atualizações por push
- Nível 2: consistência P2P (patches, versões, merge)
- Também estão sendo prototipados os seguintes recursos P2P, mas eles ainda não foram padronizados:
- Nível 3: semântica P2P (métodos, validação, confirmação)
- Nível 4: transporte P2P (URL, nomenclatura, criptografia, roteamento)
- Para a explicação, é possível consultar a apresentação de Mike no meeting-2.
- Colaboração é bem-vinda em todas as quatro áreas.
O Braid torna mecanismos de sincronização interoperáveis
- Rafie Walker sincroniza sistemas OT e CRDT usando o protocolo Braid.
- Há um babel fish em WebSocket que converte as mensagens de rede do ShareDB em mensagens Braid e vice-versa.
- Babel fish entre ShareDB e Sync9:
- Pode ser testado ao vivo.
- Agradecimentos a Seph Gentle pelos insights sobre o protocolo do ShareDB.
- Esse babel fish está quase pronto, mas não lida com casos em que os dois mecanismos de sincronização resolvem conflitos em ordens diferentes.
- Para isso, é necessário implementar o mesmo tipo de merge (veja a especificação do protocolo).
- O design de um babel fish para Automerge, um sistema CRDT, também já começou.
- Se você tem um mecanismo de sincronização, é possível colaborar no desenvolvimento de uma camada de compatibilidade com o Braid.
Por que "Braid"?
- Braid adiciona viagem histórica no tempo à web, como o videogame Braid.
- Ele entrelaça cada fio da World Wide Web para torná-la mais espessa, poderosa e robusta.
- Ele tece em conjunto várias perspectivas sobre sincronização e tecnologias distribuídas nos padrões da web.
- A braid é uma estrutura matemática e uma estrutura de dados computacional que contém as informações necessárias para mecanismos de sincronização.
- Ao representar edições como patches de uma braid, diferentes mecanismos de sincronização podem interoperar.
Opinião do GN⁺
- O protocolo Braid é uma ferramenta poderosa capaz de unificar diversos algoritmos de sincronização e pode ajudar bastante a manter a consistência em sistemas distribuídos.
- O suporte tanto a CRDT quanto a OT deve ser muito útil para desenvolvedores de aplicações colaborativas.
- A extensão do Braid-HTTP pode ser integrada facilmente a aplicações web existentes, então desenvolvedores não devem enfrentar uma grande barreira para adotar a nova tecnologia.
- As reuniões abertas do Braid incentivam a participação da comunidade e oferecem uma oportunidade de criar padrões melhores ao reunir opiniões diversas.
- O suporte a várias linguagens permite que desenvolvedores usem o Braid em sua linguagem preferida, criando um ambiente em que mais pessoas podem participar.
1 comentários
Opiniões no Hacker News
Resumo dos comentários do Hacker News
Novo lançamento da biblioteca braid-text em breve
simpleton, então não há sobrecarga de histórico no cliente.Sem número de versão na URL
Preferência por padrões existentes em vez de extensão do HTTP
PATCHpode ser mais apropriado do quepartial PUT.Vantajoso para infraestrutura distribuída
Possibilidade de um objetivo mais geral de streaming de eventos
Comparação com WebDAV
Perguntas sobre casos de uso
Links relacionados
Se é apenas para tempo real
Características do HTTP