Lompat ke konten
20 menit bacamateri 45 dari 96

Bernalar tentang partisi jaringan

CAP dan PACELC dipakai sebagai alat bernalar per operasi, bukan label basis data atau aturan 'pilih dua'.

Ditinjau 26 Oktober 2026

Pertanyaan

Saat dua bagian sistem tidak bisa saling bicara, operasi mana yang tetap boleh jalan, dan jawaban apa yang kamu berikan ke pengguna?

Setelah baca ini, kamu bisa menyatakan perilaku baca dan tulis tiap operasi selama partisi, dan menjelaskan latensi yang kamu bayar saat tidak ada partisi (PACELC).

Prasyarat dan contoh

Kamu sudah paham replikasi (M08.01) dan jaminan konsistensi (M08.02).

Tiga node menyimpan satu data: A dan B di zona 1, C di zona 2. Link antarzona putus 4 menit. Klien di zona 2 hanya bisa menjangkau C, klien di zona 1 menjangkau A dan B. Klien zona 2 menulis stok=0 ke C, sementara klien zona 1 menulis stok=3 ke A. Kalau kedua tulisan diterima, dua riwayat bercabang. Kalau C menolak tulisan sampai link pulih, pengguna zona 2 melihat error 4 menit. Tidak ada pilihan ketiga yang gratis.

Mekanisme

Partisi itu kejadian, bukan pilihan. Jaringan bisa memutus node, drop paket, atau memperlambat sampai timeout. Dari dalam node, "node lain mati" dan "link putus" tidak bisa dibedakan. Karena itu sistem terdistribusi harus punya perilaku yang ditentukan untuk kondisi ini.

CAP, dibaca dengan benar. Teorema CAP mengatakan: selama ada partisi, sebuah operasi tidak bisa sekaligus linearizable (C) dan tetap menjawab di semua sisi partisi (A). Yang bisa kamu pilih adalah apa yang dikorbankan saat partisi terjadi:

  • Pilih konsistensi: sisi yang tidak bisa menjamin kebenaran menolak operasi (atau hanya sisi mayoritas yang jalan). Pengguna di sisi minoritas melihat error atau timeout.
  • Pilih ketersediaan: kedua sisi tetap menerima operasi dan riwayat bisa bercabang. Setelah link pulih, cabang harus digabung, dengan aturan konflik yang eksplisit.

Beberapa hal yang sering salah:

  • CAP bukan "pilih dua dari tiga". Partisi tidak bisa kamu hindari, jadi pilihannya hanya C atau A, dan hanya selama partisi.
  • "C" di CAP berarti linearizability. Itu bukan "C" di ACID.
  • "A" berarti tiap node yang hidup menjawab, bukan "99,99% uptime".
  • Pilihan berlaku per operasi, bukan per basis data. Satu sistem boleh menolak tulisan saldo saat partisi tapi tetap melayani bacaan katalog yang agak basi.

PACELC. CAP diam soal kondisi normal. PACELC melengkapinya: kalau ada partisi (P), pilih A atau C; kalau tidak (E, else), pilih latensi (L) atau konsistensi (C). Di kondisi normal pun koordinasi punya harga: tulis sinkron ke zona lain menambah beberapa puluh milidetik, tulis asinkron lebih cepat tapi memberi jendela basi (M08.01). Pertanyaan yang berguna: "latensi berapa yang kita bayar tiap hari demi jaminan yang hanya berguna sekali sebulan saat partisi?"

Quorum sebagai alat. Dengan N=3 replika, tulis ke W=2 dan baca dari R=2 menjamin irisan (R+W>N), jadi pembaca bertemu setidaknya satu replika yang punya tulisan terbaru. Saat partisi memisahkan 1 node dari 2 node, sisi 2 node masih punya quorum dan jalan, sisi 1 node tidak. Itu perilaku "pilih konsistensi" yang konkret. Catatan: irisan quorum saja tidak otomatis menghasilkan linearizability tanpa aturan tambahan di sisi baca dan tulis.

Menggabungkan setelah pulih. Kalau memilih A, perlu aturan: last-write-wins (sederhana tapi membuang tulisan dan bergantung jam, M08.04), gabungan semantik (misalnya union keranjang belanja), atau tanya manusia. Tidak ada aturan yang benar untuk semua data.

Saat rancangan ini gagal

  • Melabeli produk "AP" atau "CP". Banyak sistem punya mode berbeda per konfigurasi dan operasi. Label menyembunyikan pertanyaan yang sebenarnya: apa yang terjadi pada operasi ini.
  • Mengabaikan partisi parsial. A bisa bicara ke B dan B ke C, tapi A tidak bisa ke C. Kebanyakan penalaran dua-sisi tidak menangkap kasus ini, dan sistem bisa memilih dua leader.
  • Memilih ketersediaan tanpa aturan gabung. Kedua sisi menerima tulisan, lalu pemulihan menimpa satu sisi diam-diam. Itu kehilangan data yang disamarkan sebagai ketersediaan.
  • Memilih konsistensi tanpa tampilan error yang masuk akal. Sisi minoritas menolak tulisan, tapi aplikasi mobile mengulang tanpa batas dan menambah beban saat pemulihan.
  • Memaksa C pada data yang tidak butuh. Latensi sehari-hari naik demi jaminan yang tidak pernah dipakai.

Contoh tandingan: sistem keranjang belanja memilih ketersediaan, dan setelah partisi item yang sudah dihapus muncul lagi karena gabungan memakai union. Pengguna kesal tapi tidak ada uang yang salah. Untuk pembayaran, perilaku yang sama tidak bisa diterima.

Latihan

Aplikasi pemesanan hotel punya dua region. Link antarregion putus 10 menit. Tiga operasi: (a) melihat daftar hotel, (b) memesan kamar terakhir, (c) mengubah nama tamu di pesanan. Tentukan perilaku tiap operasi di sisi minoritas, dan sebut harga PACELC kondisi normal untuk (b).

Lihat pembahasan

(a) Daftar hotel: tetap tersedia, boleh basi. Data berubah pelan, dan versi 10 menit lalu tidak merugikan. Replika lokal melayani bacaan.

(b) Pesan kamar terakhir: pilih konsistensi. Sisi minoritas menolak pemesanan baru (pesan "coba lagi sebentar" atau masuk antrean tanpa konfirmasi), hanya sisi yang punya quorum atau pemilik kamar tersebut yang boleh mengonfirmasi. Kalau kedua sisi menerima, kamar terjual dua kali dan kompensasi nanti lebih mahal dari 10 menit error.

(c) Ubah nama tamu: tersedia dengan aturan gabung. Konflik jarang dan tidak berbahaya. Terima di kedua sisi, gabungkan dengan last-write-wins per bidang, dan catat riwayatnya.

Harga PACELC untuk (b) di kondisi normal: konfirmasi pemesanan harus menunggu koordinasi lintas region, misalnya tambahan 80-150 ms per pemesanan. Alternatifnya, tentukan satu region pemilik per hotel sehingga pemesanan lokal cepat, dan hanya pemesanan dari region lain yang membayar latensi.

Jawaban yang bagus menjawab per operasi, bukan per sistem, dan menyebut apa yang dilihat pengguna saat ditolak.

Terkait

Catatan

  • Asumsi: CAP dipakai dengan definisi formalnya (linearizability dan availability tiap node hidup), bukan definisi pemasaran.
  • Yang tidak dibahas: bukti formal CAP, CRDT sebagai aturan gabung, dan partisi Byzantine.
  • Angka latensi lintas region hanya contoh. Ukur di jaringanmu.
  • Terakhir ditinjau: 26 Oktober 2026.

Isi · System Design