12 pontos por GN⁺ 2024-05-27 | 1 comentários | Compartilhar no WhatsApp
  • 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:
    • Braid-Chrome
  • 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

 
GN⁺ 2024-05-27
Opiniões no Hacker News

Resumo dos comentários do Hacker News

  • Novo lançamento da biblioteca braid-text em breve

    • Apresentação de uma biblioteca que facilita adicionar edição colaborativa a apps web.
    • Pode ser adicionada facilmente a apps Node.js e não requer WebSocket.
    • Usa o tipo de mesclagem simpleton, então não há sobrecarga de histórico no cliente.
    • É possível ver o histórico de versões por meio da extensão Braid-Chrome.
  • Sem número de versão na URL

    • O número da versão não é incluído na URL, sendo enviado em um cabeçalho separado.
    • Isso dificulta criar links para uma versão específica.
    • Há dúvidas se a sincronização precisa estar tão fortemente acoplada ao HTTP.
  • Preferência por padrões existentes em vez de extensão do HTTP

    • Em vez de estender o HTTP, pode ser melhor usar padrões já existentes.
    • Usar PATCH pode ser mais apropriado do que partial PUT.
  • Vantajoso para infraestrutura distribuída

    • O Braid pode reduzir o custo de sincronizar estado entre dispositivos mesmo sem nuvem.
    • É favorável para infraestrutura descentralizada.
  • Possibilidade de um objetivo mais geral de streaming de eventos

    • É possível assinar mudanças em recursos individuais.
    • Surgem dúvidas sobre a possibilidade de mirar em um objetivo mais geral de streaming de eventos.
  • Comparação com WebDAV

    • É parecido com o WebDAV, mas oferece recursos mais poderosos.
    • Pode ser melhor construir uma camada sobre HTTP.
  • Perguntas sobre casos de uso

    • Há perguntas sobre onde essa biblioteca poderia ser usada.
    • Os casos de uso não parecem claros.
  • Links relacionados

    • São fornecidos links relacionados a Braid: Synchronization for HTTP.
  • Se é apenas para tempo real

    • Há perguntas sobre ser algo exclusivo para tempo real e se existe algum recurso de limpeza de histórico.
    • Também há preocupação com casos em que o cliente se conecta raramente.
  • Características do HTTP

    • HTTP é um protocolo de requisição e resposta e não lida com transmissão de estado.
    • A explicação de que o Braid-HTTP seria uma extensão para um protocolo de sincronização de estado soa estranha.