Yanılmışım. Gelecek CRDT'de.
(josephg.com)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-rebasegibidir -
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?
→ 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
-
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
- 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
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
OT ile
undo/redoyu bedavadan halletmek mümkün ama... CRDT'desnapshotdışında bir yol yok...Automerge gibi durumlarda, kütüphanenin kendisi
undo/redodesteği sunuyor. Uygulayan kişi için zor olabilir ama kütüphaneyi kullanan tarafta o kadar da değil hahahttps://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.
Düşününce, Notion da CRDT kullanıyor olabilir!
OT kullananlar Google Wave/Google Docs/MS Office365
CRDT kullananlar ise Figma/Apple Notes ile Riak/Redis vb.
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
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
İş 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.
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