Eu estava errado. CRDT é o futuro.
(josephg.com)História sobre Conflict-free Replicated Data Types contada por um desenvolvedor do Google Wave
→ CRDT: estrutura de dados que dá suporte à edição simultânea em ferramentas de colaboração em tempo real
-
O Wave era baseado em OT (Operational Transform): armazenava uma lista cronológica de todas as mudanças. É como um
git rebaseem tempo real -
Um dos problemas do OT é que ele exige um servidor/BD centralizado
→ Talvez seja por isso que, quando muita gente entra ao mesmo tempo em um documento do Google Docs (também baseado em OT), aparece a mensagem “Este documento está sobrecarregado e não pode ser editado”?
→ Dá para contornar dividindo o documento ou usando loops de repetição em transações do BD (transferindo o problema de serialização para o banco)
→ Mas não é perfeito. O Wave permitia edição simultânea por várias pessoas e funcionava bem, mas tinha muitos bugs. Complexidade demais
- A ascensão do CRDT
→ O algoritmo usado pelo Wave foi inventado em 1995. Continuaram pesquisando para fazer o OT funcionar bem, mas o CRDT parece muito mais promissor
→ O CRDT segue uma abordagem diferente e permite edição em tempo real sem um BD central
→ Velocidade/capacidade/funcionalidade/complexidade, que antes eram apontados como problemas, melhoraram todos
-
Velocidade: os CRDTs atuais (Automerge / RGA ou y.js / YATA) permitem consultas em nível
log(n) -
Capacidade: a codificação colunar de Martin permite armazenar algo em torno de 1,5 a 2 vezes o tamanho do documento.
-
Funcionalidade: em teoria,
rewindingereplayingsão possíveis. Claro que ninguém implementou isso ainda -
Complexidade: o tamanho das implementações de CRDT talvez seja maior que o de OT, mas a diferença não é grande
→ Essas melhorias devem chegar em breve ao Automerge
- Em edição em tempo real, por mais triste que seja, OT e os trabalhos relacionados provavelmente não serão mais necessários
→ Tudo o que o OT faz pode ser colocado em um CRDT, mas o contrário não é possível
→ A vantagem do OT é se adequar bem a software centralizado, mas algoritmos distribuídos também funcionam bem em abordagens centralizadas
→ Um CRDT de alta qualidade executado em WASM será mais rápido do que uma implementação de OT em JS
- Agora é hora de criar CRDTs leves e rápidos.
→ A parte acadêmica está praticamente concluída, e agora é o momento de termos implementações excelentes
10 comentários
Meu nome é Hong Young-taek e estou desenvolvendo o projeto Yorkie.
O Yorkie, um repositório de documentos para apps de edição colaborativa em tempo real, também é desenvolvido com base em CRDT.
https://github.com/yorkie-team/yorkie
Eu estava errado. CRDT é o futuro.
Com OT, dá para ter
undo/redopraticamente de graça... com CRDT, parece que não há outro jeito além desnapshot...No caso do Automerge, a própria biblioteca oferece suporte a undo/redo. Para quem implementa deve ser difícil, mas do ponto de vista de quem usa a biblioteca, tranquilo haha
https://www.notion.so/sihawn/CRDT-1dc1af26d60144c09eadd178e0ae6e0d
Eu já tinha feito a tradução completa, mas acabei esquecendo de postar ;_; Dei uma relida com base no Papago e só corrigi as partes que soavam estranhas. Se alguém quiser ver como ficou a sensação geral da tradução depois de ler, dá uma olhada no link acima~
Para postar na caixa de comentários... ficou longo demais ;_; então estou compartilhando pelo link do Notion.
Pensando bem, talvez o Notion também esteja usando CRDT!
Quem usa OT são Google Wave/Google Docs/MS Office365
Quem usa CRDT são Figma/Apple Notes e também Riak/Redis etc.
Eu estava errado. CRDT é o futuro.
Como funciona a tecnologia multiusuário do Figma https://pt.news.hada.io/topic?id=814
O vídeo do desenvolvedor do Automerge, Martin Kleppmann, com link no texto, "CRDTs: The Hard Parts", explica muito bem.
No começo, ele explica muito bem comparando OT e CRDT. A parte final traz uma discussão mais profunda sobre a implementação de CRDT.
https://www.youtube.com/watch?v=x7drE24geUw
Biblioteca de CRDT usada para criar ferramentas colaborativas em JS
Rumo a um sistema de colaboração: do algoritmo OT para sistemas CRDT
https://deview.kr/2013/detail.nhn?topicSeq=66
Entre as apresentações nacionais, este é praticamente o único conteúdo que aborda CRDT.
O Hyungol, que fez esta apresentação, criou o RGA mencionado no texto.
O Yorkie também implementou o tipo de dado de lista com base no RGA.
https://github.com/yorkie-team/yorkie/issues/2