Skip to content

Queue tizimlari qanday ishlaydi?

Chop etilgan: at 10:39

Zamonaviy backend tizimlarda ko‘pincha foydalanuvchidan kelgan so‘rovlar bilan birga ko‘plab qo‘shimcha vazifalar ham bajarilishi kerak bo‘ladi. Masalan, foydalanuvchi ro‘yxatdan o‘tganda unga email yuborish, rasm yuklanganda uni optimizatsiya qilish, bildirishnoma jo‘natish yoki statistik ma’lumotlarni hisoblash kabi jarayonlar mavjud. Agar bu ishlarning barchasi bir vaqtning o‘zida HTTP request ichida bajarilsa, server sekinlashadi va foydalanuvchi uzoq vaqt javob kutishga majbur bo‘ladi.

Shu sababli zamonaviy backend arxitekturalarda queue tizimlari keng qo‘llaniladi. Queue tizimi og‘ir yoki vaqt talab qiladigan vazifalarni alohida navbatga qo‘yadi va ularni alohida worker jarayonlari orqali bajaradi. Natijada asosiy server foydalanuvchiga tez javob qaytaradi, qolgan vazifalar esa fon rejimida bajariladi.

Queue nima?

Queue — bu FIFO (First In, First Out) prinsipi asosida ishlaydigan ma’lumot tuzilmasidir. Ya’ni birinchi qo‘shilgan vazifa birinchi bo‘lib bajariladi.

Oddiy qilib aytganda, bu bankdagi navbatga o‘xshaydi. Birinchi kelgan odam birinchi xizmat oladi, keyin esa keyingi odamlar navbati bilan xizmat oladi.

Backend tizimlarda ham aynan shu prinsip qo‘llaniladi. Masalan, agar uchta vazifa queue’ga qo‘shilgan bo‘lsa, ular quyidagicha bajariladi:

Task1 → Task2 → Task3

Worker birinchi vazifani olib bajaradi, keyin ikkinchi va uchinchi vazifalarni navbat bilan bajaradi.

Queue arxitekturasi

Ko‘p queue tizimlari uchta asosiy komponentdan iborat bo‘ladi: producer, queue (broker) va worker.

Producer — bu queue’ga vazifa qo‘shadigan servis yoki dastur qismi hisoblanadi. Odatda bu API server yoki boshqa mikroservis bo‘ladi. Masalan, foydalanuvchi yangi akkaunt yaratganda server email yuborish vazifasini queue’ga qo‘shadi.

Queue yoki broker — bu vazifalarni vaqtincha saqlaydigan tizimdir. Queue vazifalarning navbatini boshqaradi, ularning statuslarini saqlaydi va workerlarga vazifalarni taqsimlaydi.

Worker — bu queue’dan vazifalarni olib, ularni bajaradigan jarayon hisoblanadi. Worker doimiy ravishda queue’ni kuzatib turadi va yangi vazifa kelganda uni bajarishni boshlaydi.

Butun jarayonni quyidagi tarzda tasavvur qilish mumkin:

Foydalanuvchi so‘rovi → Producer → Queue → Worker → Vazifa bajariladi

Queue qanday ishlaydi?

Jarayon odatda bir nechta bosqichdan iborat bo‘ladi.

Birinchi bosqichda producer yangi vazifani queue’ga qo‘shadi. Masalan, API server foydalanuvchi ro‘yxatdan o‘tganda email yuborish vazifasini queue’ga qo‘shadi.

Ikkinchi bosqichda worker queue’dan vazifani kutib turadi. Worker vazifa kelishini kutadi va queue’da yangi element paydo bo‘lishi bilan uni olib ishlay boshlaydi.

Uchinchi bosqichda worker vazifani bajaradi. Masalan, email yuboradi, rasmni optimizatsiya qiladi yoki boshqa fon vazifasini bajaradi.

Vazifa tugagach uning holati yangilanadi. Odatda queue tizimlarida vazifalar bir nechta statuslardan o‘tadi.

waitingactivecompleted yoki waitingactivefailed

Waiting — vazifa queue’da navbatda turibdi. Active — worker vazifani bajarayapti. Completed — vazifa muvaffaqiyatli tugadi. Failed — vazifa xatolik bilan tugadi.

Polling muammosi

Agar worker queue’ni oddiy usul bilan tekshirib tursa, bu polling deyiladi. Masalan, worker har bir sekundda queue’da vazifa bor-yo‘qligini tekshirishi mumkin.

Bunday jarayon quyidagicha ko‘rinadi:

while(true)
queue bo‘shmi?
agar bo‘sh bo‘lsa kut
yana tekshir

Bu usul samarasiz hisoblanadi, chunki:

Shuning uchun zamonaviy queue tizimlari polling o‘rniga boshqa mexanizm ishlatadi.

Blocking mexanizm

Ko‘p queue tizimlari blocking mexanizmdan foydalanadi. Masalan Redis asosidagi queue tizimlarida BLPOP, BRPOP yoki BLMOVE kabi commandlar mavjud.

Bu commandlar shunday ishlaydi: agar queue bo‘sh bo‘lsa, Redis worker connectionini yopmaydi va uni kutish holatida ushlab turadi. Worker CPU ishlatmaydi va yangi vazifa kelishini kutadi.

Producer yangi vazifa qo‘shganda Redis darhol worker’ni uyg‘otadi va vazifani worker’ga beradi.

Natijada tizim polling qilmaydi va juda samarali ishlaydi. Bu mexanizm katta tizimlarda resurslarni tejashga va tez ishlashga yordam beradi.

Distributed workerlar

Queue tizimlarining yana bir muhim afzalligi — ular oson scale qilinadi. Ya’ni bir nechta worker ishlashi mumkin.

Agar yangi vazifa kelib tushsa, queue uni bo‘sh workerga beradi. Bu jarayon avtomatik ravishda load balancing vazifasini bajaradi.

Natijada bir vaqtning o‘zida bir nechta vazifalar parallel bajarilishi mumkin. Bu esa katta tizimlarda juda muhim hisoblanadi.

Queue tizimlarining afzalliklari

Queue tizimlari backend arxitekturaga bir nechta muhim imkoniyatlar beradi.

Birinchidan, ular asynchronous processing imkonini beradi. Foydalanuvchi requestni kutmaydi, vazifa esa fon rejimida bajariladi.

Ikkinchidan, tizimni oson scale qilish mumkin. Workerlar sonini oshirish orqali ko‘proq vazifalarni parallel bajarish mumkin.

Uchinchidan, queue tizimlari barqarorlikni oshiradi. Agar vazifa bajarilmay qolsa, uni qayta ishga tushirish mumkin.

To‘rtinchidan, queue tizimlari load balancing imkonini beradi. Vazifalar workerlar o‘rtasida avtomatik taqsimlanadi.

Queue qayerlarda ishlatiladi?

Queue tizimlari juda ko‘p joylarda ishlatiladi. Eng ko‘p uchraydigan misollar quyidagilar:

Xulosa

Queue tizimlari zamonaviy backend arxitekturadagi eng muhim komponentlardan biridir. Ular og‘ir vazifalarni asosiy request jarayonidan ajratib, workerlar orqali fon rejimida bajarishga imkon beradi.

Natijada tizim tezroq ishlaydi, server resurslari samarali ishlatiladi va butun platforma oson scale qilinadi. Shu sababli bugungi kunda katta backend tizimlarning deyarli barchasida queue mexanizmi mavjud.


Keyingi maqola
Telefonlar bizni aqlliroq qilyaptimi yoki dangasaroq?