Quorum Queue #
Dalam RabbitMQ modern, jika kita berbicara tentang sistem production yang serius, hampir selalu pembahasannya mengarah pada satu tipe queue: Quorum Queue.
Classic queue bisa durable. Lazy queue bisa menghemat memori.
Namun keduanya tidak dirancang untuk toleransi kegagalan node secara kuat dalam cluster.
Quorum queue hadir untuk menjawab kebutuhan:
- High availability
- Data replication
- Konsistensi antar node
- Ketahanan terhadap crash sebagian cluster
Artikel ini membahas quorum queue secara mendalam dalam konteks arsitektur production-grade RabbitMQ.
“Durability melindungi dari restart. Quorum melindungi dari kehilangan node.”
Apa Itu Quorum Queue? #
Quorum queue adalah tipe queue yang:
- Menggunakan algoritma konsensus Raft
- Mereplikasi data ke beberapa node dalam cluster
- Memastikan message hanya dianggap committed jika mayoritas node menyetujui
Quorum queue dirancang untuk menggantikan classic mirrored queue (yang kini deprecated).
Ia fokus pada reliability dan konsistensi.
Konsep Dasar: Majority dan Consensus #
Dalam quorum queue:
- Queue memiliki beberapa replica (misalnya 3 node)
- Satu node menjadi leader
- Node lain menjadi follower
Message dianggap berhasil ditulis jika mayoritas (quorum) node menyetujui.
1. Diagram Quorum 3 Node #
Leader
|
-----------------
| |
Follower 1 Follower 2
Mayoritas = 2 dari 3
Jika 1 node mati:
- 2 node tersisa → sistem tetap berjalan
Jika 2 node mati:
- Tidak ada mayoritas → queue tidak tersedia
Bagaimana Quorum Queue Bekerja? #
Saat producer publish:
- Message dikirim ke leader
- Leader mengirim ke follower
- Follower acknowledge ke leader
- Jika mayoritas setuju → message committed
- Producer menerima confirm
Proses ini lebih berat dibanding classic queue.
Namun jauh lebih aman.
Perbedaan Quorum Queue vs Classic Queue #
| Aspek | Classic Queue | Quorum Queue |
|---|---|---|
| Replikasi | Tidak (default) | Ya |
| Consensus | Tidak | Raft |
| Toleransi node failure | Rendah | Tinggi |
| Performa | Lebih cepat | Lebih berat |
| Cocok untuk | Workload ringan | Production critical |
Classic queue bisa durable, tetapi tidak otomatis replicated. Quorum queue selalu replicated.
Quorum Queue vs Mirrored Queue (Legacy) #
Sebelum quorum queue, RabbitMQ menggunakan mirrored queue.
Masalah mirrored queue:
- Split brain
- Konsistensi sulit dijaga
- Konfigurasi kompleks
Quorum queue lebih sederhana dan konsisten karena berbasis Raft.
Dalam versi modern RabbitMQ, quorum queue adalah rekomendasi resmi untuk HA.
Dampak terhadap Performa #
Karena menggunakan consensus:
- Write latency meningkat
- Disk I/O meningkat
- Network traffic antar node meningkat
Tradeoff:
Lebih lambat dibanding classic queue, tetapi jauh lebih tahan terhadap kegagalan.
Crash Scenario #
Skenario 1: 1 Node Mati (3 Node Cluster) #
- Mayoritas masih ada
- Queue tetap tersedia
- Leader bisa diganti jika perlu
Skenario 2: Leader Mati #
- Follower melakukan election
- Leader baru dipilih
- Queue tetap berjalan jika mayoritas tersedia
Skenario 3: Majority Hilang #
- Queue berhenti menerima write
- Konsistensi tetap terjaga
Quorum queue memilih konsistensi dibanding availability penuh.
Kapan Menggunakan Quorum Queue? #
Gunakan quorum queue jika:
- Data sangat penting
- Tidak boleh kehilangan message
- Sistem production
- Cluster multi-node
Hampir semua business-critical workload sebaiknya menggunakan quorum queue.
Kapan Tidak Menggunakan Quorum Queue? #
Tidak ideal jika:
- Single node deployment
- Latency sangat kritikal
- Workload non-critical
- Infrastruktur disk lambat
Classic queue mungkin lebih efisien untuk workload ringan.
Quorum Queue dan Ordering #
Quorum queue tetap menjaga FIFO ordering per queue.
Namun dalam kondisi leader election, ada sedikit latency tambahan.
Ordering tetap konsisten karena Raft menjamin log ordering.
Best Practice Production #
Gunakan 3 atau 5 Node Cluster #
Jumlah replica ganjil membantu menjaga mayoritas.
Jangan Gunakan 2 Node Cluster untuk Quorum #
2 node tidak ideal karena mayoritas sulit tercapai jika satu mati.
Monitor Disk dan Network #
Karena replication membutuhkan keduanya.
Ringkasan #
| Karakteristik | Quorum Queue |
|---|---|
| Replikasi | Ya |
| Consensus | Raft |
| Toleransi node failure | Tinggi |
| Write latency | Lebih tinggi |
| Direkomendasikan untuk | Production critical |
Penutup #
Quorum queue adalah jawaban RabbitMQ terhadap kebutuhan sistem modern yang menuntut ketahanan tinggi.
Ia membawa konsep distributed consensus ke dalam messaging layer.
Dengan quorum queue, kita tidak hanya menyimpan pesan — kita memastikan pesan tetap ada meskipun sebagian sistem gagal.
Namun seperti semua sistem berbasis konsensus, ia menukar performa dengan konsistensi dan ketahanan.
Dalam arsitektur production yang matang, quorum queue bukan sekadar opsi — ia sering menjadi fondasi utama keandalan sistem.