Lazy vs Classic Queue #
Dalam RabbitMQ, queue bukan hanya soal menyimpan pesan.
Ia juga soal bagaimana pesan disimpan — di memori atau di disk.
Pada versi klasik RabbitMQ, dikenal dua mode perilaku penyimpanan utama untuk classic queue:
- Default (memory-first behavior)
- Lazy queue (disk-first behavior)
Memahami perbedaan ini sangat penting ketika sistem menghadapi:
- Backlog besar
- Traffic spike
- Consumer lambat
Artikel ini membahas lazy vs classic queue secara mendalam dalam konteks performa dan stabilitas production.
“Ketika traffic melonjak, bukan hanya logic bisnis yang diuji — tetapi bagaimana broker mengelola memori dan disk di bawah tekanan.”
Apa Itu Classic Queue? #
Classic queue adalah tipe queue tradisional di RabbitMQ.
Secara default, classic queue:
- Menyimpan message di memori selama memungkinkan
- Memindahkan ke disk jika tekanan memori meningkat
- Mengoptimalkan latency konsumsi
Pendekatan ini bersifat memory-first.
Artinya performa cepat selama memori cukup.
Apa Itu Lazy Queue? #
Lazy queue adalah konfigurasi khusus dari classic queue yang:
- Menyimpan message langsung ke disk
- Mengurangi penggunaan memori
- Dirancang untuk backlog besar
Lazy queue bersifat disk-first.
Tujuannya adalah menjaga broker tetap stabil meskipun queue sangat panjang.
Perbandingan Perilaku Penyimpanan #
1. Diagram Perbandingan Memory vs Disk Behavior #
Classic (default):
Publish → Memory → (spill to disk jika perlu)
Lazy queue:
Publish → Disk (langsung)
Classic queue memprioritaskan performa. Lazy queue memprioritaskan stabilitas memori.
Kapan Classic Queue Lebih Cocok? #
Gunakan classic (default) ketika:
- Message rate tinggi
- Consumer relatif cepat
- Backlog kecil
- Latency rendah sangat penting
Classic queue cocok untuk:
- Real-time processing
- Task queue dengan processing cepat
Namun jika consumer lambat dan backlog membesar, memory pressure bisa terjadi.
Kapan Lazy Queue Lebih Cocok? #
Gunakan lazy queue ketika:
- Backlog bisa sangat besar
- Consumer kadang lambat
- Traffic burst tidak terduga
- Stabilitas lebih penting dari latency
Lazy queue cocok untuk:
- Batch processing
- Sistem dengan spike besar (flash sale, event besar)
- Workload yang toleran terhadap sedikit tambahan latency
Dampak terhadap Memory dan Disk #
Classic queue:
- Memory usage lebih tinggi
- Disk I/O lebih rendah saat normal
- Risiko memory watermark terlampaui jika backlog besar
Lazy queue:
- Memory usage lebih rendah
- Disk I/O lebih tinggi
- Lebih stabil terhadap backlog besar
Memilih lazy queue berarti menukar latency dengan stabilitas.
Lazy Queue dan Flow Control #
Jika memory watermark terlampaui:
- RabbitMQ akan mengaktifkan flow control
- Producer diblokir sementara
Lazy queue membantu mengurangi risiko ini karena message langsung ditulis ke disk.
Namun disk harus cukup cepat dan stabil.
Lazy Queue dalam Versi Modern RabbitMQ #
Dalam versi RabbitMQ terbaru:
- Perilaku classic queue telah diperbaiki
- Banyak optimisasi dilakukan
- Lazy queue tetap tersedia untuk kasus backlog ekstrem
Namun untuk kebutuhan high availability dan reliability modern, quorum queue sering menjadi pilihan utama.
Lazy queue bukan pengganti quorum queue.
Ia hanya strategi manajemen storage untuk classic queue.
Risiko Menggunakan Lazy Queue #
Latency Lebih Tinggi #
Karena message langsung ke disk, konsumsi bisa sedikit lebih lambat.
Disk I/O Menjadi Bottleneck #
Jika disk lambat:
- Throughput turun
- Latency meningkat signifikan
Monitoring disk sangat penting.
Perbandingan Ringkas #
| Aspek | Classic (Default) | Lazy Queue |
|---|---|---|
| Strategi penyimpanan | Memory-first | Disk-first |
| Latency | Lebih rendah | Sedikit lebih tinggi |
| Memory usage | Lebih tinggi | Lebih rendah |
| Cocok untuk | Real-time workload | Backlog besar |
| Risiko | Memory pressure | Disk bottleneck |
Classic/Lazy vs Quorum Queue #
Penting dibedakan:
- Classic vs Lazy → strategi storage
- Quorum queue → strategi replication & consensus
Quorum queue fokus pada reliability cluster. Lazy queue fokus pada memory management.
Best Practice Production #
Gunakan Classic Default untuk Workload Cepat #
Jika consumer cepat dan backlog kecil.
Gunakan Lazy untuk Backlog Tak Terduga #
Jika ada risiko queue menumpuk besar.
Monitor Memory dan Disk #
Pantau:
- Memory watermark
- Disk I/O
- Queue depth
Pemilihan tipe queue tanpa monitoring bisa berujung masalah.
Penutup #
Lazy vs classic queue bukan soal benar atau salah.
Ia soal memilih strategi penyimpanan yang sesuai dengan karakter workload.
Classic menawarkan kecepatan. Lazy menawarkan stabilitas memori.
Dalam sistem production yang matang, memahami bagaimana RabbitMQ mengelola memory dan disk sama pentingnya dengan memahami cara publish dan consume.
Karena ketika traffic melonjak, performa sistem sering kali ditentukan oleh bagaimana queue menyimpan pesan — bukan oleh kode bisnis itu sendiri.