1 poin oleh GN⁺ 2025-04-02 | 1 komentar | Bagikan ke WhatsApp

Pendekatan baru untuk replikasi edge

  • Sinkronisasi data adalah masalah yang lebih sulit daripada yang terlihat. Solusi yang ada umumnya terbagi antara menyinkronkan seluruh dataset ke klien atau melacak perubahan logis.
  • Graft dirancang untuk mengatasi masalah ini, dan merupakan mesin penyimpanan open source yang menggabungkan replikasi fisik sederhana dengan replikasi logis yang efisien.

Sinkronisasi malas: sinkronkan dengan kecepatan yang Anda inginkan

  • Graft memungkinkan klien memilih kapan akan melakukan sinkronisasi, sehingga cocok untuk lingkungan edge yang hanya terhubung ke jaringan secara berkala.
  • Server menyediakan indeks halaman yang berubah sejak snapshot terakhir klien, dan klien dapat secara selektif mengambil hanya data yang dibutuhkan.

Sinkronisasi parsial: sinkronkan hanya yang dibutuhkan

  • Di lingkungan edge, seluruh dataset tidak dapat diunduh, sehingga Graft mendukung sinkronisasi parsial yang secara selektif mengambil hanya halaman yang diperlukan.
  • Graft dapat mengambil lebih dulu halaman yang dibutuhkan dengan memanfaatkan algoritma prediksi umum dan pengetahuan domain.

Edge: sinkronisasi lebih dekat ke tempat yang dibutuhkan

  • Graft menyajikan data melalui server edge di seluruh dunia, sehingga tetap menjaga latensi rendah dan responsivitas tinggi di mana pun pengguna berada.
  • Klien dirancang ringan sehingga dapat dengan mudah diintegrasikan ke browser, aplikasi mobile, dan lingkungan serverless.

Konsistensi: sinkronisasi yang aman

  • Graft menyediakan model konsistensi yang kuat untuk menangani konflik antar-klien dengan aman.
  • Melalui model snapshot isolation, klien dapat memperoleh tampilan data yang konsisten, dan penulisan diserialkan secara ketat.

Apa yang bisa dibuat dengan Graft?

  • Graft menyediakan fondasi yang kuat untuk berbagai aplikasi edge-native.
  • Ini memungkinkan aplikasi offline-first, data lintas platform, read replica stateless, dan replikasi data arbitrer.

Ekstensi SQLite Graft (libgraft)

  • libgraft adalah ekstensi native SQLite yang memungkinkan klien mereplikasi hanya sebagian database yang benar-benar digunakan, sehingga SQLite dapat berjalan bahkan di lingkungan dengan sumber daya terbatas.
  • Fitur yang disediakan mencakup replikasi asinkron, replikasi parsial malas, snapshot isolation, dan point-in-time restore.

Cara berpartisipasi

  • Graft dikembangkan di GitHub, dan kontribusi dari komunitas sangat disambut.
  • Anda dapat bergabung ke Discord atau memberikan masukan melalui email.
  • Anda juga dapat mendaftar ke daftar tunggu untuk layanan terkelola Graft.

Roadmap

  • Graft masih dalam pengembangan, dengan rencana seperti dukungan WebAssembly, integrasi dengan SQLSync, dan dukungan untuk berbagai pustaka klien.
  • Fitur seperti pengurangan latensi tulis, garbage collection, autentikasi dan otorisasi, volume forking, serta penanganan konflik juga akan ditambahkan.

Perbandingan dengan solusi replikasi SQLite lainnya

  • Graft memiliki keunggulan unik dibandingkan mvSQLite, Litestream, cr-sqlite, Cloudflare Durable Objects, Cloudflare D1, Turso & libSQL, rqlite & dqlite, dan Verneuil.
  • Replikasi parsial, dukungan untuk struktur data arbitrer, dan replikasi efisien di edge adalah pembeda utamanya.

1 komentar

 
GN⁺ 2025-04-02
Opini Hacker News
  • Tidak memahami model konsistensinya

    • Klien Graft melakukan commit secara lokal lalu mencoba commit ke remote secara asinkron
    • Jika dua klien melakukan commit secara bersamaan berdasarkan snapshot yang sama, satu akan berhasil dan yang lain gagal
    • API hanya menyediakan operasi single-commit
    • Jika commit lokal berhasil tetapi propagasi asinkron gagal, muncul masalah karena harus melakukan rollback
    • Konsep "commit" tampak tercampur dengan beberapa makna berbeda
  • Penulis Graft menyampaikan ucapan terima kasih

    • Sedang menghadiri Antithesis BugBash di Washington DC
    • Ingin bertemu dengan orang-orang yang berada di Washington
  • Memahami bahwa model konsistensinya mirip dengan git

    • Salinan lokal diubah, lalu saat melakukan "push" bisa terjadi konflik
    • Tidak ada cara yang bersih untuk mendeteksi konflik
    • Konflik dapat terjadi karena read conflict
  • Saat klien mengambil Graft, perubahan yang terjadi bisa diketahui dengan tepat

    • Dibandingkan dengan manifest dari Cloud-Backed SQLite
    • Tidak memerlukan komputasi di server
  • Tidak membahas detail implementasi

    • Diperlukan lapisan sinkronisasi agar pengembang aplikasi tidak perlu memikirkan sinkronisasi
    • Dapat mendukung sinkronisasi pribadi tanpa langganan
  • Menganggap penggunaan VFS sebagai "hack" yang menarik

    • Sedang mengembangkan mesin sinkronisasi sendiri untuk IDE yang offline-first
    • Menggunakan struktur tree sehingga penyelesaian konflik menjadi tantangan
  • Proyek yang menggunakan algoritma Leap sangat menarik

    • Mudah untuk berfokus pada integrasi SQLite, tetapi pendekatannya justru ke masalah penyimpanan terdistribusi yang lebih umum dan lebih low-level
    • Solusi umum tanpa pengalaman konkret bisa berisiko
  • Masalah bisa muncul saat klien mobile berada di koneksi lambat

    • Mengusulkan pendekatan hybrid yang mendeteksi sinkronisasi lambat lalu mengirim query langsung ke server
  • Pendekatan yang memakai page sebagai unit sinkronisasi dasar cukup menarik

    • Bisa menimbulkan konflik dengan banyak pengguna bersamaan
    • OT atau CRDT mungkin lebih baik
  • Ini adalah masalah yang sangat menantang

    • Ingin mencobanya di aplikasi React Native