24 pontos por xguru 2020-10-05 | 10 comentários | Compartilhar no WhatsApp

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 rebase em 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”?

Publicidade

→ 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

Publicidade
  • 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, rewinding e replaying sã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

Publicidade
  • 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

 
hackerwins 2020-10-05

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

 
iolothebard 2020-10-05

Eu estava errado. CRDT é o futuro.

Com OT, dá para ter undo/redo praticamente de graça... com CRDT, parece que não há outro jeito além de snapshot...

 
xguru 2020-10-05

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

 
ffdd270 2020-10-05

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.

 
ffdd270 2020-10-05

Pensando bem, talvez o Notion também esteja usando CRDT!

 
xguru 2020-10-05

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.

 
xguru 2020-10-05

Eu estava errado. CRDT é o futuro.

Como funciona a tecnologia multiusuário do Figma https://pt.news.hada.io/topic?id=814

 
xguru 2020-10-05

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

 
xguru 2020-10-05

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.

 
hackerwins 2020-10-06

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