Ignore Backpressure #

Dalam sistem berbasis RabbitMQ, aliran pesan tidak selalu stabil.

Ada saat-saat ketika:

  • Producer mengirim terlalu cepat
  • Consumer terlalu lambat
  • Disk mulai penuh
  • Memory watermark tercapai

RabbitMQ memiliki mekanisme bawaan untuk menangani kondisi ini, yang disebut backpressure.

Namun salah satu anti-pattern paling berbahaya adalah:

Mengabaikan backpressure dan terus mendorong traffic seolah-olah sistem tidak memiliki batas.

Artikel ini membahas apa itu backpressure, bagaimana RabbitMQ mengimplementasikannya, dan mengapa mengabaikannya bisa berujung pada kegagalan sistemik.

“Ketika sistem melambat, itu bukan gangguan — itu peringatan.”

Apa Itu Backpressure? #

Backpressure adalah mekanisme kontrol aliran (flow control) yang memberi sinyal:

“Sistem sedang tidak mampu menerima beban tambahan saat ini.”

Dalam RabbitMQ, backpressure bisa terjadi ketika:

  • Memory watermark terlampaui
  • Disk hampir penuh
  • Queue depth sangat besar
  • Consumer terlalu lambat

Backpressure bukan error. Ia adalah mekanisme perlindungan.


Bagaimana RabbitMQ Menerapkan Backpressure? #

Beberapa mekanisme utama:

1️⃣ Memory Watermark #

Jika penggunaan memory melewati batas tertentu:

  • Broker akan memblokir connection producer
  • Publish akan ditahan sementara

2️⃣ Flow Control #

RabbitMQ dapat mengaktifkan flow control pada channel tertentu.

Producer akan mengalami:

  • Publish latency meningkat
  • Atau blocked connection

3️⃣ Disk Alarm #

Jika disk space hampir habis:

  • Publish dihentikan
  • Broker melindungi dirinya dari crash

Backpressure adalah tanda bahwa sistem mencoba bertahan.


Anti-Pattern: Mengabaikan Sinyal Ini #

Beberapa kesalahan umum:

  • Producer tidak menangani blocked connection
  • Tidak memonitor publish latency
  • Tidak memonitor queue depth
  • Tidak membatasi rate publish
  • Tidak memiliki circuit breaker

Akibatnya:

  • Producer terus mencoba publish
  • Retry agresif
  • Traffic melonjak
  • Sistem semakin tertekan

Ini disebut self-amplifying failure.


Dampak Mengabaikan Backpressure #

1️⃣ Cascading Failure #

Jika RabbitMQ melambat:

  • Producer timeout
  • Producer retry
  • Traffic meningkat
  • RabbitMQ semakin overload

Masalah menyebar ke service lain.


2️⃣ Memory Exhaustion #

Jika backlog tidak dikontrol:

  • Queue membesar
  • Memory pressure meningkat
  • Flow control aktif terus-menerus

3️⃣ Latency Tidak Stabil #

Tanpa rate limiting:

  • Publish latency fluktuatif
  • Consumer overload
  • SLA tidak konsisten

4️⃣ Disk Bottleneck #

Jika menggunakan persistent atau quorum queue:

  • Disk I/O meningkat drastis
  • Replication latency meningkat

Backpressure adalah gejala. Mengabaikannya memperparah penyakit.


Mengapa Orang Mengabaikan Backpressure? #

Beberapa alasan umum:

  • Tidak memahami mekanismenya
  • Tidak memonitor metric yang tepat
  • Mengira broker selalu mampu menerima beban
  • Fokus hanya pada sisi producer

Padahal sistem messaging adalah ekosistem.


Strategi Menghadapi Backpressure #

1️⃣ Monitor Metric Kunci #

Pantau:

  • Memory usage
  • Disk usage
  • Queue depth (ready & unacked)
  • Publish rate
  • Confirm latency
  • Blocked connection count

Backpressure harus terlihat di dashboard.


2️⃣ Gunakan Publisher Confirm dengan Timeout #

Jika confirm lambat:

  • Producer harus memperlambat publish

3️⃣ Implement Rate Limiting di Producer #

Jangan publish tanpa batas.

Gunakan:

  • Token bucket
  • Adaptive throttling

4️⃣ Gunakan Prefetch pada Consumer #

Prefetch membantu mengontrol aliran dari sisi consumer.


5️⃣ Gunakan Circuit Breaker #

Jika broker overload:

  • Producer dapat menolak request sementara
  • Sistem tetap stabil

Backpressure dalam Quorum Queue #

Pada quorum queue:

  • Write latency meningkat saat cluster sibuk
  • Confirm latency bisa menjadi indikator overload

Quorum queue lebih sensitif terhadap disk dan network.

Backpressure di sini harus dimonitor lebih ketat.


Perbandingan: Sistem yang Sadar vs Tidak Sadar Backpressure #

SistemPerilaku
Mengabaikan backpressureRetry agresif, cascading failure
Sadar backpressureAdaptive throttling, stabil

Backpressure adalah dialog antara broker dan producer. Jika producer tidak mendengar, sistem akan berteriak melalui kegagalan.


Ringkasan #

Ignoring backpressure adalah anti-pattern karena:

  • Mengabaikan mekanisme perlindungan broker
  • Memperburuk overload
  • Menyebabkan cascading failure
  • Membuat sistem tidak stabil

Backpressure bukan musuh. Ia adalah sinyal kesehatan.


Penutup #

Dalam sistem terdistribusi, tidak ada komponen yang tak terbatas.

RabbitMQ memiliki batas memory, disk, dan I/O.

Backpressure adalah cara broker mengatakan:

“Berhenti sebentar.”

Arsitektur yang matang mendengar sinyal ini dan menyesuaikan diri.

Arsitektur yang mengabaikannya akan memaksa sistem melewati batas — sampai akhirnya sistem berhenti dengan cara yang jauh lebih menyakitkan.

Karena dalam sistem messaging, stabilitas bukan tentang seberapa cepat kita mengirim.

Tetapi tentang seberapa baik kita tahu kapan harus melambat.

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact