CAP Theorem menyatakan bahwa dalam sistem terdistribusi, kamu hanya bisa menjamin 2 dari 3 properti secara bersamaan:
Consistency (C)
/\
/ \
/ \
/ ?? \
/ \
/ \
Availability (A) ── Partition Tolerance (P)
Tiga properti CAP:
C — Consistency (Konsistensi) Setiap read mendapat data terbaru atau error. Semua node melihat data yang sama pada waktu yang sama.
A — Availability (Ketersediaan) Setiap request mendapat response (bukan error), meski tidak selalu berisi data terbaru.
P — Partition Tolerance (Toleransi Partisi) Sistem tetap beroperasi meski ada kegagalan jaringan (network partition) antara node-node.
Mengapa hanya bisa pilih 2?
Bayangkan 2 node database (Node A dan Node B) tiba-tiba tidak bisa
berkomunikasi (network partition):
Pilihan 1 — Pilih C + P (korbankan A):
→ Node A menolak semua request sampai bisa sync dengan Node B
→ Sistem tidak available, tapi data pasti konsisten
Pilihan 2 — Pilih A + P (korbankan C):
→ Node A dan Node B terus menerima request secara independen
→ Data bisa berbeda di kedua node (inconsistent)
→ Eventual consistency: akan sync nanti saat network pulih
Pilihan 3 — C + A (korbankan P):
→ Hanya bisa ada di sistem dengan 1 node (tidak terdistribusi)
→ Tidak realistis untuk sistem modern yang butuh HA
Kategori sistem berdasarkan CAP:
| Tipe | Contoh | Trade-off |
|---|---|---|
| CP | HBase, Zookeeper, MongoDB* | Tidak available saat partisi |
| AP | Cassandra, DynamoDB, CouchDB | Data mungkin stale saat partisi |
| CA | RDBMS tradisional (single node) | Tidak partition-tolerant |
PACELC — model yang lebih realistis:
CAP hanya berlaku saat ada partisi. PACELC memperluas ini:
If Partition: tradeoff C vs A
Else (normal): tradeoff Latency vs Consistency
// Contoh trade-off praktis:
// Bank (pilih CP):
function transfer(from, to, amount) {
// Gunakan distributed transaction
// Jika tidak bisa confirm semua node → reject request
// Lebih baik gagal dari pada data tidak konsisten
}
// Social media like count (pilih AP):
function getLikeCount(postId) {
// Baca dari node terdekat
// Mungkin sedikit stale (2000 vs 2001 likes)
// Tidak masalah, user tidak perlu hitungan persis real-time
}
Consistency levels dalam AP system:
Strong Consistency → Semua node harus sync (seperti CP)
Eventual Consistency → Akan konsisten, tapi tidak sekarang
Read-your-writes → User selalu lihat perubahan yang dia buat sendiri
Monotonic reads → User tidak pernah melihat data "lebih lama" dari sebelumnya
Causal consistency → Operasi yang related tampil berurutan dengan benar
Pilihan praktis:
- Gunakan CP untuk: transaksi keuangan, booking/reservasi, sistem inventori kritis
- Gunakan AP untuk: social media feeds, analytics, rekomendasi, shopping cart
- Gunakan eventual consistency dengan versi untuk: katalog produk, profil user, konten artikel
8 Fallacies of Distributed Computing
CAP theorem adalah kasus spesifik dari problem yang lebih umum. Peter Deutsch dan kawan-kawan di Sun Microsystems (1994) merumuskan 8 asumsi keliru yang sering dibuat pengembang tentang distributed system. Semua pattern system design (termasuk CAP) adalah respon terhadap fallacies ini:
| # | Fallacy | Realita | Connection ke CAP |
|---|---|---|---|
| 1 | Network is reliable | Network putus secara rutin | ⟹ butuh P (partition tolerance) |
| 2 | Latency is zero | Latency signifikan antar datacenter | ⟹ C atau A terpaksa trade-off saat P |
| 3 | Bandwidth is infinite | Bandwidth terbatas dan mahal | ⟹ tidak semua data bisa direplikasi real-time |
| 4 | Network is secure | Packet bisa di-intercept/tamper | ⟹ butuh encryption, auth di setiap layer |
| 5 | Topology doesn't change | DNS, IP, lokasi berubah | ⟹ service discovery wajib dinamis |
| 6 | There is one administrator | Multi-tim, multi-org, multi-cloud | ⟹ koordinasi lintas domain sulit |
| 7 | Transport cost is zero | Serialization, TLS handshake, routing = CPU + $ | ⟹ batch + compress berarti |
| 8 | The network is homogeneous | Protokol, versi, vendor berbeda | ⟹ standard dan compat layer |
Hubungan ke CAP: CAP theorem pada dasarnya adalah konsekuensi formal dari fallacy #1 dan #2. Kalau network andal dan latency nol (= fallacy false), CAP tidak akan jadi masalah — kita bisa punya strong consistency + high availability sekaligus.
Tapi karena network tidak andal dan ada latency, kita dipaksa memilih. Dan karena bandwidth tidak infinite, full replication tidak praktis. Dan seterusnya.
Pelajaran praktis: saat mendesain sistem, cek apakah desainmu diam-diam mengasumsikan salah satu fallacy di atas. Kalau iya → di situlah sistem akan patah di production.
🎭 Analogi sehari-hari: Tim WhatsApp grup family. Network bagus = semua bisa baca pesan + balas. Tiba-tiba sinyal mati di rumah satu anggota.
- Pilih C (Consistency): kamu gak bisa kirim sampai semua online — semua liat history sama tapi gak bisa chat. Aman tapi lumpuh
- Pilih A (Availability): kamu tetap bisa kirim, anggota offline akan dapet pas online. Sementara, beberapa anggota lihat pesan beda urutan. Bisa jalan tapi mungkin out-of-sync
WhatsApp pilih A — lebih penting bisa kirim daripada perfectly consistent.
💡 CAP bukan biner — ada spectrum:
- Strong consistency = pasti dapat data terbaru, tapi mungkin error saat partisi
- Eventual consistency = pasti dapat response, mungkin stale beberapa detik
- Causal consistency = operasi terkait urut benar (chat reply muncul setelah pesan asli)
- Read-your-writes = kamu selalu lihat tulisanmu sendiri
- Monotonic reads = gak melihat "data lama" lagi setelah lihat versi baru
Pilih level konsistensi sesuai kebutuhan, bukan all-or-nothing.
⚠️ Jebakan klasik:
- Asumsi network reliable = bug muncul saat ada glitch network
- "Eventual" tanpa bound = gak ada SLA berapa lama eventual. Praktiknya wajib bound (e.g., dalam 5 detik)
- Strong consistency tanpa pertimbangan latency = response time meledak saat ada partisi
- Full ACID di distributed system = mahal dan sering gak perlu. Banyak case eventual cukup
- Salah klasifikasi system — MongoDB di-pasarkan sebagai CP tapi praktiknya CP/AP tergantung config
🎯 Decision framework:
- Finansial / inventory / booking → CP (correct > available)
- Social feed / search / analytics → AP (available > perfect data)
- Shopping cart → AP dengan reconciliation (cart gak boleh hilang, sedikit stale OK)
- Catalog / static content → AP + CDN cache
- Distributed lock / coordination → CP (Zookeeper, etcd)
TL;DR: CAP = di network partition, harus pilih C atau A. Modern reality: spectrum, bukan binary. PACELC tambah dimensi latency. Pilih level consistency sesuai use case. Finansial = CP, social media = AP. 8 Fallacies of Distributed Computing = sumber semua trade-off.