πŸ”„ Jebakan “Eventual Consistency”: Mengapa Data yang Hilang Lebih Bahaya dari Data Lama?

Pernah mengalami momen ini? Kamu baru saja upload file atau posting status, lalu halaman di-refresh, tapi kontennya hilang? πŸ€” Beberapa detik kemudian, baru muncul.

Di dunia Distributed Systems, kita sering berlindung di balik alasan “Eventual Consistency”. Tapi menurut Marc Brooker (AWS), ada dimensi yang sering dilupakan: Completeness.
Mari kita bedah isinya! πŸ‘‡

πŸ›‘ 1. The Problem (Masalah Utama)
Dalam sistem berskala besar (seperti NoSQL DB atau Search Index), kita sering mengorbankan konsistensi demi kecepatan (availability). Kita menerima “Eventual Consistency” (data akan konsisten pada akhirnya).
πŸ‘» Isu: Masalah timbul ketika “Eventual” ini menyebabkan False Negatives. Contoh: User mencari data yang baru saja mereka buat, tapi sistem mengembalikan hasil “0 Results” (Kosong).
πŸ˜• User Confusion: User tidak tahu bedanya antara “Data memang tidak ada” atau “Sistem belum selesai sinkronisasi”. Ini memicu panic refresh atau input ulang data (duplikasi).

🧠 2. Metodologi / Perspektif Baru
Marc mengajukan hipotesis bahwa kita terlalu fokus pada urutan (ordering) dan nilai (values), tapi melupakan Completeness (Kelengkapan himpunan data).
πŸ” Hipotesis: Sebuah sistem query yang mengembalikan hasil parsial (tidak lengkap) seringkali lebih buruk daripada sistem yang sedikit lebih lambat tapi akurat.
🀝 Read Your Writes: Standar minimal UX yang baik adalah: Jika saya baru saja menulis X, maka ketika saya membaca ulang, X harus ada di sana.

πŸ“‰ 3. Finding & Impact
Apa dampaknya jika kita mengabaikan aspek completeness ini?
πŸ“‰ Erosi Kepercayaan: Jika user sering melihat data mereka “hilang” sesaat, mereka akan kehilangan kepercayaan pada reliabilitas aplikasi.
πŸ”₯ Hidden Load: User yang bingung akan melakukan refresh halaman berkali-kali secara agresif, yang justru menambah beban pada database yang sedang berusaha melakukan sinkronisasi.

πŸ› οΈ 4. How to Handle (Teknik Mitigasi)
Karena ini adalah konsep arsitektur, solusinya bukan “install tool X”, melainkan pola desain:
🎟️ Consistency Tokens: Saat klien melakukan write, server memberikan “token” (misal: timestamp atau transaction ID). Saat klien melakukan read, sertakan token tersebut. Sistem harus menunggu sampai data setara dengan token tersebut tersedia sebelum menjawab.
πŸ”— Causal Consistency: Pastikan sistem menghormati hubungan sebab-akibat. Jika A menyebabkan B, maka siapa pun yang melihat B harus bisa melihat A juga.
⏳ Explicit Latency: Lebih baik menampilkan loading spinner sedikit lebih lama daripada menampilkan halaman kosong yang menyesatkan.

πŸ“ 5. Key Takeaways
🚧 Eventual Consistency != No Guarantees: Jangan jadikan “Eventual Consistency” alasan untuk membuat sistem yang berperilaku acak. Tetapkan batas (bounds) yang jelas.
🧩 Completeness is Critical: Konsistensi bukan cuma soal data yang berubah, tapi juga soal data yang ada vs tidak ada.
users UX > Pure Performance: Kecepatan itu penting, tapi kepastian bahwa data user aman tersimpan jauh lebih penting untuk user experience.

Ada yang pernah berjuang melawan isu “Read Your Writes” di production? Sharing solusinya di bawah ya! πŸ‘‡

πŸ”— Sumber Lengkap:
https://brooker.co.za/blog/2025/11/18/consistency.html

#DistributedSystems #BackendEngineering #SystemDesign #AWS #Consistency #Database #SoftwareArchitecture #DevOps #TechTalk

Leave a Comment