𝗖𝗥𝗗𝗧𝘀 𝗶𝗻 𝗞𝗼𝘁𝗹𝗶𝗻 𝗠𝘂𝗹𝘁𝗶𝗽𝗹𝗮𝘁𝗳𝗼𝗿𝗺: 𝗞𝗶𝗹𝗹 𝗬𝗼𝘂𝗿 𝗦𝘆𝗻𝗰 𝗦𝗲𝗿𝘃𝗲𝗿

Sebagian besar tim membangun server pusat untuk menangani konflik data. Server menerima penulisan (writes), memilih pemenang, dan berharap yang terbaik. Hal ini menciptakan titik kegagalan tunggal (single point of failure) dan kode yang kompleks untuk dipelihara.

Conflict-Free Replicated Data Types (CRDTs) mengubah hal ini. Setiap perangkat mencapai status (state) yang sama tanpa perlu otoritas pusat. Ini adalah jaminan matematis.

Anda dapat mengganti backend sinkronisasi Anda dengan blob storage sederhana. Server Anda menjadi relay yang menyimpan blob data. Server tersebut tidak perlu memahami data Anda.

Gunakan primitif ini untuk aplikasi seluler Anda:

• LWW-Register: Gunakan untuk profil pengguna dan pengaturan. • G-Counter: Gunakan untuk analitik atau jumlah tayangan. • PN-Counter: Gunakan untuk inventaris atau total keranjang. • OR-Set: Gunakan untuk tag dan favorit.

Untuk sebagian besar aplikasi seluler, LWW-Register dan OR-Set mencakup hampir segalanya.

Tip Implementasi: Saat Anda membangun LWW-Register, selalu sertakan nodeId. Jika dua pembaruan memiliki timestamp yang persis sama, nodeId akan bertindak sebagai penentu (tiebreaker). Tanpa ini, perangkat Anda tidak akan sinkron ke status yang sama.

State-based vs. Operation-based:

Pilih State-based (CvRDT) untuk perangkat seluler. Ini bekerja pada jaringan yang tidak stabil karena proses penggabungannya (merge process) bersifat idempotent. Jika sinkronisasi gagal di tengah jalan, Anda cukup mencobanya lagi.

Hindari Operation-based (CmRDT) di tahap awal. Ini memerlukan pengiriman tepat satu kali (exactly-once delivery). Membangun infrastruktur tersebut pada jaringan seluler sangatlah sulit dan menambah kompleksitas yang ingin Anda hindari.

Arsitekturnya:

  1. Bangun logika CRDT Anda di modul commonMain pada proyek Kotlin Multiplatform Anda.
  2. Gunakan SQLDelight untuk menyimpan data secara lokal.
  3. Sinkronkan blob data ke layanan seperti S3 atau Cloud Storage.
  4. Backend Anda tetap sederhana dan murah.

Berhentilah membangun mesin sinkronisasi yang kompleks. Gunakan CRDTs untuk memindahkan logika ke sisi klien. Ini memungkinkan Anda fokus membangun fitur daripada mengelola rotasi server.

Sumber: https://dev.to/software_mvp-factory/crdts-in-kotlin-multiplatform-kill-your-sync-server-28n8