Bosh sahifa Wiki Queue-Based Load Leveling

Queue-Based Load Leveling

Queue-Based Load Leveling — producer yaratadigan ish hajmi bilan consumer qayta ishlash capacity’si orasiga queue qo‘yib, keskin traffic burstlarini silliqlaydigan cloud pattern. Producer ishni darhol consumerga yubormaydi, balki queue’ga yozadi. Workerlar esa o‘z tezligida qayta ishlaydi.

Pattern downstream service va database’ni qisqa muddatli overload’dan himoya qiladi.

Muammo

Userlar bir vaqtda minglab fayl yuklashi mumkin.

Har upload darhol image processing service’ga yuborilsa:

yuz beradi.

Queue burstni backlog sifatida saqlaydi.

Producer

Producer task yoki commandni message ko‘rinishida queue’ga yuboradi.

Message:

saqlashi mumkin.

Producer queue qabul qilgach userga accepted javob qaytarishi mumkin.

Queue

Queue producer va consumer tezligini ajratadi.

U:

semantikasiga ega.

Queue cheksiz buffer emas.

Maksimal backlog va retention belgilanadi.

Consumer

Consumer yoki worker queue’dan message olib qayta ishlaydi.

Worker soni capacity va backlogga qarab oshirilishi mumkin.

Bir message uzoq ishlasa visibility timeout va heartbeat boshqariladi.

Load leveling

Producer traffic’i notekis:

past
past
katta burst
past

Consumer esa barqaror tezlikda ishlaydi.

Queue yuqori nuqtadagi ishni vaqt bo‘ylab taqsimlaydi.

Bu peak capacity uchun ortiqcha server saqlash ehtiyojini kamaytiradi.

Asynchronous javob

Operation darhol tugamasligi sabab clientga:

berilishi mumkin.

“Success” faqat queue’ga qabul qilinganini anglatadimi yoki ish tugaganini aniq ko‘rsatish kerak.

Backlog

Queue’dagi ishlanmagan message’lar backlog.

Faqat message soni yetarli metric emas.

Kuzatiladi:

  • eng eski message yoshi;
  • arrival rate;
  • processing rate;
  • retry;
  • poison message;
  • estimated drain time.

Autoscaling

Workerlar queue depth yoki message yoshi bo‘yicha scale qilinadi.

Juda agressiv scaling downstream database’ni birdan overload qilishi mumkin.

Maksimal concurrency dependency capacity bilan cheklanadi.

Scale down faol tasklar tugagach bajariladi.

Acknowledgement

Worker taskni muvaffaqiyatli tugatgach ack yuboradi.

Processingdan oldin ack qilinsa worker crashida task yo‘qolishi mumkin.

Keyin ack qilinsa task qayta yetkazilishi ehtimoli bor.

Handler idempotent bo‘ladi.

Visibility timeout

Worker message’ni olganda u vaqtincha boshqa consumerlardan yashiriladi.

Timeout tugab, ack bo‘lmasa message yana ko‘rinadi.

Task timeoutdan uzoq ishlasa visibility uzaytiriladi.

Juda uzun timeout crashdan keyingi retryni kechiktiradi.

Retry

Transient xatoda message qayta ishlanadi.

Retry:

bilan boshqariladi.

Doimiy invalid payload cheksiz retry qilinmaydi.

Dead-letter queue

Ko‘p marta xato bergan message DLQga o‘tkaziladi.

U yerda:

saqlanadi.

Tuzatilgach boshqariladigan replay qilinadi.

Ordering

Bitta queue global ordering bersa parallel consumerlar uni buzishi mumkin.

Entity bo‘yicha ordering kerak bo‘lsa partition key yoki message group ishlatiladi.

Bitta hot key parallelizmni cheklaydi.

Idempotency

Ayni message qayta yetkazilishi mumkin.

Unique task ID va processed registry duplicate side effectni to‘xtatadi.

Yoki operation natural idempotent bo‘ladi.

External payment uchun provider idempotency key ishlatiladi.

Payload hajmi

Katta faylni queue message ichiga joylashtirish qimmat.

Fayl object storage’ga yoziladi.

Message ichida:

saqlanadi.

Bu Claim Check Patternga yaqin.

Queue to‘lishi

Backlog capacity limitga yetsa:

  • producer throttle;
  • request rad etish;
  • past priorityni drop;
  • boshqa storage;
  • emergency scale

siyosati ishlatiladi.

Queue to‘lishidan oldin alert beriladi.

Stale task

Task juda kech qayta ishlansa business ma’nosini yo‘qotishi mumkin.

Masalan, bir daqiqalik notification bir soatdan keyin foydasiz.

Message TTL yoki handler deadline’ni tekshiradi.

Transactional enqueue

Database update va queue publish alohida bajarilsa biri muvaffaqiyatli, biri xato bo‘lishi mumkin.

Transactional Outbox database commit va event yozuvini birga saqlaydi.

Keyin worker queue’ga publish qiladi.

Observability

End-to-end trace:

request
→ enqueue
→ wait
→ worker start
→ processing
→ completion

bosqichlarini ko‘rsatadi.

Queue wait va processing latency alohida o‘lchanadi.

Poison message

Payload syntax jihatdan valid, ammo har safar handlerni xatoga olib keladigan bo‘lishi mumkin.

Delivery count limitga yetgach u DLQga o‘tkaziladi.

Aks holda bitta message queue boshini band qilib, keyingi ishlarni kechiktiradi.

Worker lease

Uzoq taskda worker message ownershipini heartbeat bilan uzaytiradi.

Worker to‘xtasa lease tugab, boshqa worker taskni qayta oladi.

Eski worker kech yakunlansa fencing yoki idempotency duplicate natijani cheklaydi.

Capacity rejalash

Arrival rate doim processing rate’dan yuqori bo‘lsa queue faqat muammoni kechiktiradi.

Sustainable capacity:

worker soni × bir worker throughputi

arrival rate’dan yuqori bo‘lishi kerak.

Backlog drain vaqti SLO bilan solishtiriladi.

Priority queue

Kritik tasklar oddiy backlog ortida uzoq kutmasligi uchun alohida queue yoki priority ishlatilishi mumkin.

Doimiy yuqori priority oqimi past priority tasklarni starvationga olib kelmasligi uchun quota ajratiladi.

Bog‘liq tushunchalar

Message queue, Load leveling, Backpressure, Worker, Acknowledgement, Visibility timeout, Dead-letter queue, Autoscaling, Idempotency, Transactional Outbox