Recraftory

CAP Theorem

Memahami CAP Theorem dan implikasinya dalam memilih database dan merancang sistem terdistribusi

Apa itu CAP Theorem

  • Teorema yang dikemukakan oleh Eric Brewer (2000), dibuktikan secara formal oleh Gilbert dan Lynch (2002)
  • Menyatakan bahwa sistem terdistribusi tidak bisa menjamin ketiga properti berikut secara bersamaan:
    • Consistency
    • Availability
    • Partition Tolerance
  • Dalam kondisi network partition, sistem harus memilih antara Consistency atau Availability

Tiga Properti CAP

Consistency (C)

  • Setiap read mendapatkan write terbaru atau error
  • Semua node melihat data yang sama pada waktu yang sama
  • Contoh: setelah transfer saldo berhasil, saldo yang tampil di semua device langsung terupdate

Availability (A)

  • Setiap request mendapat response (bukan error), meskipun mungkin bukan data terbaru
  • Sistem selalu beroperasi dan merespons
  • Contoh: aplikasi tetap bisa diakses meskipun beberapa node gagal

Partition Tolerance (P)

  • Sistem tetap beroperasi meskipun ada network partition (komunikasi antar node terputus)
  • Dalam sistem terdistribusi nyata, network partition pasti bisa terjadi
  • Karena itu, Partition Tolerance biasanya tidak bisa diabaikan

Implikasi Praktis

Karena Partition Tolerance harus ada, pilihan nyata adalah:

CP (Consistency + Partition Tolerance)

  • Saat network partition, sistem memilih untuk tidak merespons daripada memberikan data tidak konsisten
  • Prioritas: data selalu benar
  • Contoh sistem: HBase, Zookeeper, etcd, MongoDB (dalam mode tertentu)
  • Cocok untuk: transaksi keuangan, inventory management, sistem yang tidak boleh ada data conflict

AP (Availability + Partition Tolerance)

  • Saat network partition, sistem tetap merespons tapi mungkin dengan data yang tidak up-to-date
  • Prioritas: sistem selalu available
  • Contoh sistem: Cassandra, DynamoDB, CouchDB
  • Cocok untuk: social media feeds, shopping cart, sistem toleran terhadap eventual consistency

Eventual Consistency

Konsep yang sering muncul dalam sistem AP:

  • Data akan konsisten pada akhirnya, tapi mungkin ada jeda waktu
  • "Eventually" bisa berarti milidetik atau beberapa detik
  • Contoh: update profil di satu data center butuh waktu propagasi ke data center lain
  • Pola: DNS propagation, shopping cart di e-commerce besar

PACELC Extension

Keterbatasan CAP: hanya membahas saat ada partition. PACELC memperluas:

  • Jika ada Partition (P): pilih antara Availability (A) atau Consistency (C)
  • Else (E) — saat sistem normal: pilih antara Latency (L) atau Consistency (C)

Menambahkan dimensi latency yang relevan dalam operasional normal.

Memilih Database Berdasarkan CAP

KebutuhanRekomendasiContoh
Transaksi keuangan, tidak boleh inconsistentCPPostgreSQL, MySQL dengan replication
Social media, traffic tinggi, toleran stale dataAPCassandra, DynamoDB
Koordinasi distribusi (config, lock)CPZookeeper, etcd
Analytics, bisa ada eventual consistencyAPCassandra, HBase
General purposeCA (single node) atau CPPostgreSQL, MongoDB

Contoh Nyata

Shopping Cart (AP lebih cocok)

  • Lebih baik user bisa add to cart dengan data sedikit stale daripada cart tidak bisa diakses
  • Conflict resolution: merge cart saat checkout

Bank Transfer (CP lebih cocok)

  • Lebih baik gagal daripada data saldo tidak konsisten
  • Tidak acceptable jika saldo berbeda di dua tempat

Praktik Terbaik

  • Pahami kebutuhan bisnis sebelum memilih database — bukan semua sistem butuh strong consistency
  • Tidak semua data dalam satu sistem memiliki kebutuhan consistency yang sama
  • Beberapa sistem modern (Spanner, CockroachDB) mendekati CA dengan teknik khusus, tapi dengan trade-off latency
  • Dokumentasikan keputusan pilihan database beserta alasannya dalam ADR