CRDT 5000x Lebih Cepat: Petualangan Optimasi
Pendahuluan
- Beberapa tahun lalu, para peneliti Prancis menerbitkan makalah yang membandingkan algoritma pengeditan kolaboratif real-time
- Mereka mengimplementasikan beberapa algoritma dan melakukan benchmark performa
- Beberapa algoritma membutuhkan lebih dari 3 detik hanya untuk operasi tempel sederhana
- Algoritma yang bermasalah adalah algoritma yang digunakan di ShareJS
Penyebab Masalah
- Dalam makalah tersebut, saat menempelkan teks besar, prosesnya dipecah menjadi 1000 operasi terpisah
- Ini bukan masalah pada algoritmanya sendiri, melainkan masalah implementasi
Daya Tarik CRDT
- CRDT (Conflict-Free Replicated Data Types) memungkinkan banyak pengguna mengedit data secara bersamaan
- Pengguna bisa bekerja secara lokal tanpa latensi, dan saat sinkronisasi konsistensi tetap terjaga secara otomatis
- Dapat bekerja bahkan tanpa server pusat
Masalah pada Automerge
- Automerge adalah pustaka untuk pengeditan kolaboratif yang berbasis pada algoritma RGA
- Setiap karakter dalam dokumen dikelola dengan ID unik, dan saat menyisipkan perlu menentukan item induk
- Karena masalah performa, memproses 260.000 operasi edit memerlukan waktu 5 menit
- Penggunaan memorinya juga sangat tinggi
Optimasi Performa
- Masalah performa Automerge disebabkan oleh struktur data berbasis tree yang kompleks dan penggunaan Immutablejs
- Yjs sangat meningkatkan performa dengan menggunakan satu flat list
- Yjs menggunakan cache untuk mencari posisi penyisipan, dan memakai doubly linked list agar penyisipan diproses secara efisien
- Yjs 30 kali lebih cepat dan juga menggunakan memori lebih sedikit
Beralih ke Rust
- Rust memungkinkan kontrol atas layout memori sehingga performa bisa ditingkatkan lebih jauh
- Melalui implementasi CRDT baru bernama Diamond types, dicapai performa 5 kali lebih cepat daripada Yjs
- Diamond yang diimplementasikan dengan Rust memproses 260.000 operasi edit hanya dalam 56 milidetik
Kesimpulan
- Dengan struktur data yang dioptimalkan dan pengelolaan memori yang efisien, performa CRDT dapat ditingkatkan secara signifikan
- Dengan menggunakan bahasa tingkat rendah seperti Rust, performa yang lebih cepat bisa dicapai
Ringkasan GN⁺
- CRDT adalah masa depan pengeditan kolaboratif, alat yang kuat untuk menjaga konsistensi bahkan tanpa server pusat
- Masalah performa Automerge berasal dari struktur data yang kompleks dan penggunaan memori yang tidak efisien
- Yjs dan Diamond types sangat meningkatkan performa dengan menggunakan struktur data yang sederhana dan efisien
- Dengan menggunakan bahasa tingkat rendah seperti Rust, performa yang lebih cepat bisa dicapai
- Saat mengembangkan alat pengeditan kolaboratif, Yjs dan Diamond types layak dipertimbangkan
1 komentar
Komentar Hacker News
Alasan 32 entri paling efisien adalah karena cache line berukuran 64 byte
Sulit menemukan contoh aplikasi nyata yang menggunakan CRDTs dan memberikan pengalaman yang baik
CRDTs kuat, tetapi punya kelemahan berupa jejak pekerjaan (atau elemen) historis yang tertinggal
Kutipan Readme GitHub saat ini:
Artikel ini ditulis dengan sangat baik sehingga meskipun isinya sulit, rasanya tidak bisa berhenti membaca
Melihat penggunaan hierarki membuat penasaran apakah nested set dipertimbangkan sebagai gantinya
Beberapa tahun lalu, saya menemukan postingan ini secara kebetulan
Penasaran mengapa WASM 4 kali lebih lambat daripada eksekusi native
Karena implementasi Rust untuk Automerge sudah selesai, akan menarik melihat benchmark yang diperbarui