7 pontos por GN⁺ 2023-10-19 | 1 comentários | Compartilhar no WhatsApp
  • Reflect é um novo framework para criar aplicações web multiplayer semelhantes ao Figma, Notion e Google Sheets.
  • Ele é uma evolução do Replicache, um framework de sincronização no lado do cliente, e adiciona um servidor totalmente gerenciado para facilitar o desenvolvimento de apps multiplayer.
  • O Reflect agora está disponível publicamente pela primeira vez.
  • O framework lida com o problema de resolução de conflitos na edição colaborativa, garantindo que todos os usuários vejam o mesmo conteúdo e que os conflitos sejam resolvidos de forma natural.
  • Diferentemente de ferramentas populares do ecossistema web, como CRDTs (Conflict-Free Replicated Data Types), o Reflect usa a técnica de Transactional Conflict Resolution, popular na indústria de videogames.
  • Os benefícios e diferenciais únicos do Reflect vêm das escolhas centrais desse motor de sincronização.
  • O Reflect usa funções JavaScript chamadas mutators para implementar mudanças e gera um mutation record quando um mutator é chamado.
  • As mutations são aplicadas localmente e transmitidas ao servidor, que as lineariza com base no momento de chegada para gerar o próximo estado autoritativo.
  • O Reflect consegue lidar com aplicações que evoluem rapidamente, adicionando mutations enquanto aguarda a confirmação das anteriores.
  • Esse framework exige um armazenamento de dados rápido, capaz de retroceder, criar forks e branches, além de um armazenamento rápido no lado do servidor que consiga acompanhar as mutations recebidas.
  • A abordagem do Reflect se generaliza bem, sendo adequada para diversas operações, como aritmética, manipulação de listas e imposição de invariantes de alto nível.
  • O servidor do Reflect é autoritativo, recalcula por conta própria o resultado das mutations e faz com que todos os clientes vejam esse resultado.
  • Essa autoridade do servidor permite autenticação detalhada e a execução de outros códigos no servidor.
  • O Reflect também oferece vantagens como validação de esquema e migrações.
  • A estratégia de sincronização do Reflect, Transactional Conflict Resolution, é simples, flexível e poderosa, sendo uma boa escolha para criar aplicações multiplayer.

1 comentários

 
GN⁺ 2023-10-19
Opiniões no Hacker News
  • Este artigo discute o Reflect, um framework para apps web multiplayer com sincronização no estilo de jogos.
  • A demo do Reflect na página inicial é interativa e parece mostrar usuários expressando empolgação ao concluir tarefas, o que é bastante interessante.
  • Como o Reflect não é open source, isso pode limitar sua adoção em empresas que priorizam software de código aberto para infraestrutura central.
  • O Reflect era conhecido anteriormente como Replicache e agora inclui um servidor de sincronização rápido.
  • O framework permite que os usuários decidam como lidar com conflitos usando código simples e sequencial, o que é visto como uma vantagem em relação aos CRDTs.
  • O modelo de dados e o modelo de programação do Reflect recebem elogios por sua simplicidade.
  • Há uma discussão sobre os desafios de implementar operações de lista no Reflect, especialmente em cenários com atualizações simultâneas de vários usuários.
  • Um usuário aponta a terminologia confusa usada no Reflect e sugere "multiusuário" em vez de "multiplayer" para software que não é de jogos.
  • Há perguntas sobre como o Reflect lida com autenticação, já que bibliotecas CRDT frequentemente não têm uma autoridade central para validar mutações.
  • A estratégia do Reflect é comparada à "sincronização determinística" usada no desenvolvimento de jogos para sincronizar o estado de muitas entidades.
  • Surgem perguntas sobre como o Reflect lida com upgrades de mutators e com possíveis divergências entre as operações do cliente e do servidor.
  • Um usuário comenta que, para lidar com mensageria de alta frequência em engines multiplayer, seria necessário um protocolo UDP dentro do navegador, criticando a sobrecarga do TCP e dos WebSockets.