Bosh sahifa Wiki Load leveling

Load leveling

Load leveling — ishlarning kelish tezligi notekis bo‘lganda ularni navbat yoki bufer orqali tekislab, quyi tizimga boshqariladigan sur’atda uzatish usulidir. Bu yondashuv qisqa trafik cho‘qqilarini darhol bajarishga urinmaydi, balki ishni saqlab, mavjud quvvat bo‘shagan sari qayta ishlaydi. Natijada xizmat resurslari keskin oshib-kamaymaydi va ortiqcha yukdan himoyalanadi.

Producer ishni message queue’ga joylaydi, consumerlar esa o‘z quvvatiga mos tezlikda oladi. Agar bir daqiqada odatdagidan o‘n baravar ko‘p vazifa kelsa, navbat vaqtincha o‘sadi. Consumerlar soni barqaror qolishi yoki autoscaling orqali ehtiyotkor oshirilishi mumkin. Tizimning muvaffaqiyati navbat ishni yo‘qotmasligi va backlog qabul qilinadigan muddatda kamayishiga bog‘liq.

Load leveling rate limiting bilan bir xil emas. Rate limit ortiqcha so‘rovni rad etishi yoki keyinga qoldirishi mumkin; leveling esa qabul qilingan ishni vaqt bo‘yicha taqsimlaydi. Backpressure producerga tizim bandligini bildirishga xizmat qiladi. Ular ko‘pincha birga ishlaydi: navbat sig‘imi tugaganda yangi ish cheklanadi.

Kechikish va sig‘im

Tekislash throughput barqarorligini oshiradi, ammo navbat kutish vaqtini keltiradi. Interaktiv so‘rovda foydalanuvchi darhol natija kutsa, barcha amalni fon navbatiga o‘tkazish mos kelmasligi mumkin. Elektron xat yuborish, rasm qayta ishlash, hisobot tayyorlash va webhook yetkazish kabi asinxron ishlar bu modelga qulay.

Navbat sig‘imi kelish cho‘qqisi, consumer tezligi va ruxsat etilgan kechikish asosida hisoblanadi. Cheksiz backlog xotira yoki diskni tugatadi va eski ishlarni foydasiz holga keltiradi. Har xabar deadline yoki amal qilish muddati bilan kelishi mumkin; muddati o‘tgan vazifa bajarilmasdan dead-letter oqimiga yuboriladi yoki xavfsiz tashlanadi.

Ishonchlilik

Consumer xabarni qayta ishlagach acknowledgement beradi. Jarayon tasdiqdan oldin qulasa, xabar yana ko‘rinadi va takror bajarilishi mumkin. Shu sababli handler idempotent bo‘lishi yoki deduplication kalitidan foydalanishi kerak. Poison message doimiy xato qilsa, cheksiz qayta urinish navbatni band etmasligi uchun urinishlar chegaralanib, dead-letter queue’ga ajratiladi.

Monitoringda queue depth, eng eski xabar yoshi, kelish va tugatish tezligi, qayta urinish va xatolar kuzatiladi. Faqat navbat uzunligi yetarli emas: katta backlog tez kamayishi mumkin, kichik backlogdagi bitta juda eski vazifa esa consumer tiqilib qolganini ko‘rsatadi. Autoscaling qarori ham shu ko‘rsatkichlar va quyi bog‘liqlik quvvatini hisobga oladi.

+## Ustuvorlik va adolat

Barcha ish bir xil qiymatga ega bo‘lmasa, alohida navbat yoki weighted scheduler qo‘llanadi. Masalan, foydalanuvchining qisqa interaktiv vazifasi katta batch eksport ortida uzoq qolmasligi kerak. Faqat yuqori ustuvorlikni bajarish esa past navbatni abadiy och qoldiradi; aging mexanizmi kutgan sari uning ustuvorligini oshiradi. Tenant bo‘yicha kvota bitta mijoz cho‘qqisini boshqalardan ajratadi. FIFO tartibi sodda, lekin sekin bitta ish head-of-line blocking yaratishi mumkin. Vazifani o‘lcham yoki resurs turiga ko‘ra bo‘lish consumer poollarining samaradorligini oshiradi. Biznes SLO navbatda ruxsat etilgan maksimal yoshni har sinf uchun belgilaydi.

Disaster recoveryda navbatning o‘zi ham replikatsiya va retentionga muhtoj. Region almashganda producer ikki navbatga yozib yubormasligi, consumer esa eski backlogni yangi trafik bilan adolatli birlashtirishi kerak. Recovery sinovi xabar tartibi va deduplication holatini ham tekshiradi.

Bog‘liq tushunchalar

Message queue, Backpressure, Rate limiting, Autoscaling, Idempotency, Dead-letter queue, Throughput