24 puan yazan xguru 2020-10-05 | 10 yorum | WhatsApp'ta paylaş

Google Wave geliştiricisinin anlattığı Conflict-free Replicated Data Types hikayesi

→ CRDT: gerçek zamanlı iş birliği araçlarında eşzamanlı düzenlemeyi destekleyen veri yapısı

  • Wave, OT (Operational Transform) tabanlıydı: tüm değişiklikler için zaman sıralı bir liste saklar. Gerçek zamanlı git-rebase gibidir

  • OT'nin sorunlarından biri, merkezi bir sunucu/VT gerektirmesidir

→ Google Docs'ta (o da OT tabanlı) belgeye çok kişi yüklendiğinde "Bu belge aşırı yük altında, düzenleme yapılamıyor" uyarısının çıkma nedeni muhtemelen budur?

Reklam

→ Belgeyi bölmek veya VT transaction'ına retry loop eklemekle kaçınmak mümkün (serialization sorununu VT'ye devretmek)

→ Ama kusursuz değil. Wave'de birçok kişi aynı anda düzenleme yapıyordu ve genel olarak çalışıyordu, ama çok fazla bug vardı. Fazla karmaşıktı

  • CRDT'nin yükselişi

→ Wave'in kullandığı algoritma 1995'te icat edildi. OT'nin iyi çalışması için araştırmalar sürdü, ama CRDT daha umut verici

→ CRDT farklı bir yaklaşım benimsiyor ve merkezi VT olmadan gerçek zamanlı düzenlemeyi mümkün kılıyor

→ Eskiden sorun diye gösterilen hız/kapasite/özellik/karmaşıklık alanlarının hepsinde iyileşme var

Reklam
  • Hız: güncel CRDT'ler (Automerge / RGA or y.js / YATA) log(n) düzeyinde sorgulama yapabiliyor

  • Kapasite: Martin'in Columnar encoding yaklaşımı, veriyi belge boyutunun yaklaşık 1.5~2 katı büyüklükte saklayabiliyor.

  • Özellik: teoride rewinding ve replaying mümkün. Tabii bunu henüz uygulayan yok

  • Karmaşıklık: implementasyon boyutu OT'ye göre CRDT'de biraz daha büyük olabilir, ama fark çok değil

→ Bu iyileştirmelerin yakında Automerge'de sunulması bekleniyor

Reklam
  • Gerçek zamanlı düzenleme açısından bakıldığında, ne yazık ki OT ve ilgili çalışmalar artık gerekli olmayacak gibi görünüyor

→ OT'nin tüm işlevleri CRDT'ye eklenebilir, ama tersi mümkün değil

→ OT'nin avantajı merkezi yazılıma uygun olması, ama dağıtık algoritmalar merkezi yaklaşımda da iyi çalışıyor

→ WASM üzerinde çalışan yüksek kaliteli bir CRDT, JS ile yazılmış bir OT implementasyonundan daha hızlı olacaktır

  • Artık hafif ve hızlı CRDT'ler yapma zamanı.

→ Akademik taraf neredeyse tamamlandı; şimdi gereken şey müthiş (kick-ass) implementasyonlar

10 yorum

 
hackerwins 2020-10-05

Yorkie projesini geliştiren kişi olarak ben Hong Youngtaek.

Eşzamanlı düzenleme uygulamaları için belge deposu olan Yorkie de CRDT tabanlı olarak geliştiriliyor.

https://github.com/yorkie-team/yorkie

 
iolothebard 2020-10-05

OT ile undo/redoyu bedavadan halletmek mümkün ama... CRDT'de snapshot dışında bir yol yok...

 
xguru 2020-10-05

Automerge gibi durumlarda, kütüphanenin kendisi undo/redo desteği sunuyor. Uygulayan kişi için zor olabilir ama kütüphaneyi kullanan tarafta o kadar da değil haha

 
ffdd270 2020-10-05

https://www.notion.so/sihawn/CRDT-1dc1af26d60144c09eadd178e0ae6e0d

Tam çevirisini yapmıştım ama paylaşmayı unutmuşum ;m; Papago temelinde bir kez okuyup sadece kulağa garip gelen kısımları düzelttim. Genel havasının nasıl olduğunu merak edip okumak isteyenler yukarıdaki bağlantıya göz atabilir~

Yorum penceresine koymak için... fazla uzun ;m; o yüzden Notion bağlantısı olarak paylaşıyorum.

 
ffdd270 2020-10-05

Düşününce, Notion da CRDT kullanıyor olabilir!

 
xguru 2020-10-05

OT kullananlar Google Wave/Google Docs/MS Office365

CRDT kullananlar ise Figma/Apple Notes ile Riak/Redis vb.

 
xguru 2020-10-05

Yanılmışım. Gelecek CRDT.

Figma'nın çok kullanıcılı teknolojisi nasıl çalışıyor: https://tr.news.hada.io/topic?id=814

 
xguru 2020-10-05

Yazıda bağlantısı verilen Automerge geliştiricisi Martin Kleppmann'ın "CRDTs: The Hard Parts" videosu gerçekten çok iyi anlatıyor.

Başlarda OT ile CRDT'yi güzelce karşılaştırarak açıklıyor. Sonraki kısım ise CRDT uygulamasına dair daha derin bir anlatım.

https://www.youtube.com/watch?v=x7drE24geUw

JS ile işbirliği araçları geliştirirken kullanılan bir CRDT kütüphanesi

 
xguru 2020-10-05

İş birliği sistemlerine doğru: OT algoritmasından CRDT sistemine

https://deview.kr/2013/detail.nhn?topicSeq=66

Yurt içindeki sunumlar arasında CRDT konusunu ele alan neredeyse tek içerik bu gibi görünüyor.

 
hackerwins 2020-10-06

Bu sunumu yapan Hyunggeol, metinde bahsedilen RGA'yı geliştirdi.

Yorkie de liste tipi veri türünü RGA temelinde hayata geçirdi.

https://github.com/yorkie-team/yorkie/issues/2