-
Movable tree CRDTs and Loro's implementation
-
Latar belakang
- Dalam sistem terdistribusi dan perangkat lunak kolaboratif, mengelola hubungan hierarkis itu kompleks
- Saat memodelkan perpindahan dengan menggabungkan penghapusan dan penyisipan dalam struktur data, sulit menyelesaikan konflik sekaligus memenuhi ekspektasi pengguna
- Sebagai contoh, jika node yang sama dipindahkan secara bersamaan ke induk yang berbeda, node duplikat dengan isi yang sama dapat dibuat
-
Konflik pada pohon yang dapat dipindahkan
- Operasi utama pada pohon yang dapat dipindahkan: membuat, menghapus, memindahkan
- Konflik yang dapat terjadi saat menyinkronkan operasi serempak:
- node yang sama dihapus dan dipindahkan
- node yang sama dipindahkan ke bawah node yang berbeda
- node lain dipindahkan sehingga menimbulkan siklus
- node turunan dipindahkan saat node leluhur sedang dihapus
-
Penghapusan dan perpindahan pada node yang sama
- Relatif mudah diselesaikan
- Berdasarkan timestamp sistem terdistribusi atau kebutuhan spesifik aplikasi, satu operasi diterapkan dan operasi lainnya diabaikan
-
Memindahkan node yang sama ke bawah induk yang berbeda
- Menggabungkan operasi perpindahan serempak lebih rumit
- Bergantung pada aplikasinya, berbagai pendekatan bisa diambil:
- menghapus node dan membuat salinannya di bawah node induk lain
- mengizinkan node terhubung ke dua induk (umumnya tidak diizinkan)
- mengurutkan semua operasi dan menerapkannya secara berurutan
-
Timbulnya siklus akibat perpindahan node lain
- Menyelesaikan siklus akibat operasi perpindahan serempak itu rumit
- Beberapa solusi:
- memunculkan error
- merender node siklik di area "timeout" khusus
- memproses operasi perpindahan di server
- menggunakan topological sort
- menyembunyikan edge yang menyebabkan siklus
-
Penghapusan node leluhur dan perpindahan node turunan
- Perpindahan node turunan saat node leluhur dihapus mudah terlewatkan
- Jika semua node turunan langsung dihapus, hal ini dapat disalahartikan sebagai kehilangan data
-
Cara aplikasi populer menangani konflik
- Dropbox: memperlakukan perpindahan file sebagai hapus lalu buat, tetapi ada risiko kehilangan data
- Figma: server terpusat mendeteksi siklus dan menolak operasi untuk menjaga konsistensi
-
CRDT pohon yang dapat dipindahkan
- Menggunakan CRDT alih-alih solusi terpusat
- Algoritme awal berbasis CRDT sulit diimplementasikan dan memiliki overhead penyimpanan yang besar
- Berkat optimasi berkelanjutan, beberapa algoritme sinkronisasi pohon berbasis CRDT kini cocok untuk lingkungan produksi
-
Operasi perpindahan dengan ketersediaan tinggi untuk replicated tree
- Menyatukan tiga operasi pohon (membuat, menghapus, memindahkan) menjadi operasi perpindahan
- Operasi perpindahan didefinisikan sebagai
Move t p m c
- Penghapusan node ditangani dengan memindahkannya ke node
TRASH
-
Timestamp logis yang diurutkan secara global
- Menggunakan timestamp Lamport untuk menentukan urutan kausal peristiwa dalam sistem terdistribusi
- Angka yang lebih kecil berarti peristiwa yang lebih awal
-
Menerapkan operasi jarak jauh
- Keamanan operasi bergantung pada keadaan pohon saat operasi diterapkan
- Saat menangani update jarak jauh, operasi terbaru dibatalkan, operasi baru disisipkan, lalu operasi yang dibatalkan diterapkan kembali
-
CRDT: hierarki pohon yang dapat berubah
- Setiap node melacak semua node induk historis dan memberinya penghitung
- Jika siklus terjadi saat sinkronisasi, node akan dihubungkan kembali ke node induk historis terdekat
-
Implementasi CRDT pohon yang dapat dipindahkan di Loro
- Mengimplementasikan algoritme Martin Kleppmann untuk memberikan performa tinggi
- Mengintegrasikan algoritme
Fractional Index agar pengurutan node anak dimungkinkan
-
Potensi konflik dalam pengurutan node anak
- Saat beberapa node disisipkan pada posisi yang sama,
Fractional Index yang sama dapat diberikan
- Menggunakan
PeerID untuk menentukan urutan relatif dari Fractional Index yang sama
-
Implementasi dan ukuran encoding
Fractional Index menyediakan urutan node
- Dalam kasus terburuk, ukuran encoding memerlukan byte tambahan, tetapi ini jarang terjadi
-
Pekerjaan terkait
- Selain
Fractional Index, ada juga movable list CRDT
Fractional Index sederhana untuk diimplementasikan dan berguna ketika hanya urutan relatif yang diperlukan
-
Benchmark
- Melakukan benchmark performa implementasi movable tree milik Loro
- Dapat mendukung kolaborasi real-time dan checkout versi historis yang mulus
-
Ringkasan
- Memperkenalkan kesulitan implementasi CRDT pohon yang dapat dipindahkan dan dua algoritme inovatif
- Loro mengintegrasikan algoritme Martin Kleppmann dan
Fractional Index untuk memenuhi beragam skenario aplikasi
-
Ringkasan GN⁺
- CRDT pohon yang dapat dipindahkan memainkan peran penting dalam mengelola struktur data hierarkis di sistem terdistribusi
- Loro menawarkan performa tinggi dan penyelesaian konflik yang efisien, sehingga cocok untuk aplikasi kolaborasi real-time
- Menggunakan
Fractional Index untuk menyelesaikan masalah pengurutan node anak
- Proyek lain dengan fungsi serupa termasuk Figma dan Dropbox
1 komentar
Komentar Hacker News
Sedang mengembangkan editor multipemain baru
insmov(pindah atau sisip)React Table Library dirilis sebagai open source
Meminta saran
Saat menangani konten teks berformat seperti Google Docs/Zoho Writer, manipulasi pohon diperlukan
Penasaran apakah ada CRDT yang praktis untuk aplikasi padat data seperti gambar (piksel) dan model 3D
Menganggap paragraf pertama terdengar seperti suara ChatGPT