24 poin oleh xguru 2020-10-05 | 10 komentar | Bagikan ke WhatsApp

Cerita tentang Conflict-free Replicated Data Types dari pengembang Google Wave

→ CRDT: struktur data yang mendukung penyuntingan serentak dalam alat kolaborasi real-time

  • Wave berbasis OT (Operational Transform): menyimpan daftar berurutan berdasarkan waktu untuk semua perubahan. Mirip git rebase real-time

  • Salah satu masalah OT adalah membutuhkan server/DB terpusat

→ Mungkin inilah alasan munculnya pesan "dokumen ini kelebihan beban sehingga tidak dapat diedit" saat terlalu banyak orang masuk ke dokumen Google Docs (yang juga berbasis OT)?

→ Bisa dihindari dengan membagi dokumen atau memakai retry loop pada transaksi DB (masalah serialisasi dipindahkan ke DB)

→ Tetapi tidak sempurna. Wave memang memungkinkan banyak orang mengedit secara bersamaan dan berjalan dengan baik, tetapi bug-nya banyak. Terlalu rumit

  • Kebangkitan CRDT

→ Algoritme yang dipakai Wave ditemukan pada 1995. Riset terus dilakukan agar OT bekerja dengan baik, tetapi CRDT lebih menjanjikan

→ CRDT mengambil pendekatan berbeda, sehingga penyuntingan real-time dimungkinkan tanpa DB terpusat

→ Kecepatan/ukuran/fitur/kompleksitas yang dulu dianggap masalah kini semuanya membaik

  • Kecepatan: CRDT modern (Automerge / RGA atau y.js / YATA) kini memungkinkan lookup pada tingkat log(n)

  • Ukuran: encoding kolumnar Martin memungkinkan penyimpanan sekitar 1,5~2 kali ukuran dokumen

  • Fitur: secara teori, rewinding dan replaying dimungkinkan. Tentu saja, belum ada yang mengimplementasikannya

  • Kompleksitas: ukuran implementasi CRDT mungkin lebih besar daripada OT, tetapi perbedaannya tidak besar

→ Peningkatan di atas akan segera tersedia di Automerge

  • Untuk penyuntingan real-time, dengan sedih harus diakui bahwa OT dan pekerjaan terkait tampaknya tidak akan dibutuhkan lagi

→ Semua fitur OT bisa dimasukkan ke CRDT, tetapi sebaliknya tidak mungkin

→ Kelebihan OT adalah cocok untuk software terpusat, tetapi algoritme terdistribusi juga bekerja baik pada pendekatan terpusat

→ CRDT berkualitas tinggi yang berjalan di WASM akan lebih cepat daripada implementasi OT di JS

  • Sekarang adalah waktunya membuat CRDT yang ringan dan cepat.

→ Bagian akademisnya hampir selesai, dan kini saatnya menghadirkan implementasi yang hebat

10 komentar

 
hackerwins 2020-10-05

Saya Hong Young-taek, yang sedang mengembangkan proyek Yorkie.

Yorkie, repositori dokumen untuk aplikasi penyuntingan kolaboratif, juga dibuat berbasis CRDT.

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

 
iolothebard 2020-10-05

Saya yang salah. CRDT adalah masa depan.

Kalau pakai OT, undo/redo bisa didapat dengan gampang... sedangkan CRDT sepertinya tidak punya cara lain selain snapshot...

 
xguru 2020-10-05

Untuk kasus seperti Automerge, library-nya sendiri memang mendukung undo/redo. Mungkin sulit bagi yang mengimplementasikannya, tapi dari sudut pandang pengguna library sih ya haha

 
ffdd270 2020-10-05

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

Saya sempat menerjemahkan versi lengkapnya, tapi lupa mengunggahnya ;m; Saya membacanya sekali lagi berbasis Papago dan hanya memperbaiki bagian-bagian yang terasa canggung. Kalau ada yang penasaran seperti apa nuansa keseluruhannya, silakan cek tautan di atas~

Kalau diunggah di kolom komentar.. terlalu panjang ;m; jadi saya bagikan lewat tautan Notion.

 
ffdd270 2020-10-05

Kalau dipikir-pikir, sepertinya Notion juga mungkin sedang menggunakan CRDT!

 
xguru 2020-10-05

Yang menggunakan OT adalah Google Wave/Google Docs/MS Office365

Yang menggunakan CRDT adalah Figma/Apple Notes serta Riak/Redis dan lain-lain

 
xguru 2020-10-05

Saya salah. CRDT adalah masa depan.

Bagaimana teknologi multi-pengguna Figma bekerja https://id.news.hada.io/topic?id=814

 
xguru 2020-10-05

Video "CRDTs: The Hard Parts" dari Martin Kleppmann, pengembang Automerge, yang ditautkan di tulisan itu memang sangat bagus penjelasannya.

Di awal, dia menjelaskan perbandingan antara OT dan CRDT dengan sangat baik. Bagian belakangnya membahas implementasi CRDT secara mendalam.

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

Library CRDT yang digunakan saat membuat alat kolaborasi dengan JS

 
xguru 2020-10-05

Menuju sistem kolaborasi: dari algoritma OT ke sistem CRDT

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

Di antara presentasi domestik, ini tampaknya hampir satu-satunya materi yang membahas CRDT.

 
hackerwins 2020-10-06

Hyeongeol yang memberikan presentasi ini adalah orang yang membuat RGA yang disebutkan di artikel.

Yorkie juga mengimplementasikan tipe data berbentuk daftar berdasarkan RGA.

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