Durable vs Transient #
Salah satu kesalahpahaman paling umum dalam RabbitMQ adalah mengira bahwa semua queue dan message otomatis aman dari crash.
Padahal, dalam RabbitMQ ada perbedaan fundamental antara:
- Durable queue
- Non-durable (transient) queue
Dan perbedaan ini berdampak langsung pada:
- Ketahanan data
- Recovery setelah restart
- Risiko kehilangan message
Artikel ini membahas durable vs transient queue secara mendalam dalam konteks production system.
“Banyak sistem merasa aman karena pesan berhasil dikirim — sampai broker restart dan semuanya hilang.”
Apa Itu Durable Queue? #
Durable queue adalah queue yang definisinya disimpan ke disk.
Artinya:
- Jika broker restart
- Queue tetap ada setelah restart
Namun penting dipahami:
Durable queue tidak otomatis membuat message di dalamnya durable.
Durability queue dan durability message adalah dua hal berbeda.
Apa Itu Non-Durable (Transient) Queue? #
Non-durable queue adalah queue yang hanya hidup selama broker berjalan.
Jika broker restart:
- Queue hilang
- Semua message di dalamnya hilang
Transient queue cocok untuk:
- Temporary workload
- Development
- Response queue pada RPC pattern
Tidak cocok untuk sistem mission-critical.
Hubungan Durable Queue dan Persistent Message #
Untuk benar-benar aman dari crash, dua hal harus benar:
- Queue harus durable
- Message harus dikirim dengan delivery_mode = 2 (persistent)
Jika salah satu tidak terpenuhi:
- Message bisa hilang saat crash
1. Diagram Kombinasi Durability #
Queue Durable + Message Persistent → Aman (recovered)
Queue Durable + Message Transient → Message bisa hilang
Queue Transient + Message Persistent → Queue hilang
Queue Transient + Message Transient → Hilang total
Keduanya harus selaras.
Bagaimana RabbitMQ Menyimpan Durable Queue? #
Ketika queue durable dibuat:
- Definisi queue disimpan dalam metadata disk
- Saat restart, broker memuat kembali definisi tersebut
Jika message juga persistent:
- Message disinkronisasi ke disk (bergantung konfigurasi)
- Akan direcover saat broker hidup kembali
Namun proses disk sync memiliki konsekuensi performa.
Tradeoff Performa vs Durability #
Durability tidak gratis.
Menulis ke disk berarti:
- Disk I/O meningkat
- Latency publish bertambah
- Throughput bisa menurun
Transient queue dan message lebih cepat karena:
- Tidak perlu fsync ke disk
Namun risiko kehilangan data meningkat.
Desain harus mempertimbangkan kebutuhan bisnis.
Crash Scenario Analysis #
Mari kita lihat beberapa skenario.
Skenario 1: Broker Restart Normal #
Jika:
- Queue durable
- Message persistent
Maka:
- Queue kembali tersedia
- Message dipulihkan
Skenario 2: Broker Crash Mendadak #
Jika:
- Message belum tersinkronisasi ke disk
Ada kemungkinan kehilangan message meskipun persistent.
Publisher confirm membantu mengurangi risiko ini.
Skenario 3: Node Mati dalam Cluster #
Jika menggunakan classic queue tanpa replikasi:
- Queue di node tersebut tidak tersedia
Jika menggunakan quorum queue:
- Majority tetap melayani
- Data tetap tersedia
Durability berbeda dengan high availability.
Kapan Menggunakan Durable Queue? #
Gunakan durable queue jika:
- Data penting
- Tidak boleh kehilangan message
- Sistem production
- SLA tinggi
Sebagian besar production system sebaiknya menggunakan durable queue.
Kapan Menggunakan Transient Queue? #
Gunakan transient queue jika:
- Data sementara
- RPC response queue
- Cache invalidation non-critical
- Development environment
Jangan gunakan untuk transaksi bisnis penting.
Kesalahan Umum #
Mengira Durable Queue Saja Cukup #
Tanpa persistent message, data tetap bisa hilang.
Mengaktifkan Durability Tanpa Memikirkan Disk #
Disk I/O bisa menjadi bottleneck.
Monitoring disk latency sangat penting.
Tidak Menggunakan Publisher Confirm #
Durable + persistent tetap bisa kehilangan message jika publish belum dikonfirmasi.
Durable Queue vs Quorum Queue #
Durable queue tidak sama dengan quorum queue.
- Durable → tahan restart node
- Quorum → tahan kegagalan sebagian node (cluster)
Durable adalah tentang persistence. Quorum adalah tentang replication dan consensus.
Ringkasan #
| Aspek | Durable Queue | Transient Queue |
|---|---|---|
| Bertahan restart | Ya | Tidak |
| Simpan metadata ke disk | Ya | Tidak |
| Cocok untuk production | Ya | Tidak |
| Performa | Lebih lambat | Lebih cepat |
Penutup #
Durability adalah keputusan arsitektural, bukan sekadar flag konfigurasi.
Memilih antara durable dan transient queue berarti memilih antara:
- Kecepatan
- Dan ketahanan data
Dalam sistem bisnis yang serius, kehilangan satu message bisa berarti kehilangan uang, data, atau kepercayaan.
Karena itu memahami durable vs transient queue bukan hanya soal teknis — tetapi soal tanggung jawab desain sistem.