Redis'da eng kam ishlatilgan proksini atomar taqsimlash
Saralangan toʻplam va qisqa Lua skriptidan foydalanib, proksi taqsimot sonini ishchilar orasida tanlang va oshiring.
Bir necha ishchi Redis orqali bitta hovuzni baham koʻrsa, saralangan toʻplam oddiy siyosatni amalga oshirishi mumkin: qayd etilgan taqsimoti eng kam boʻlgan mos proksini tanlash. Proksi identifikatorini aʼzo, taqsimot sonini esa ball sifatida saqlang.
Ruxsat etilgan ommaviy soʻrovlarga xizmat qiluvchi hovuz uchun bepul proksilar roʻyxati shu hovuzning muvofiqlik qoidalari boʻyicha baholanadigan soʻnggi nuqta nomzodlarini bera oladi. Mos aʼzolarni kelishilgan boshlangʻich son bilan ishga tushiring. Soʻng tanlash va oshirishni bitta server tomonidagi amalga aylantiring:
local chosen = redis.call('ZRANGE', KEYS[1], 0, 0)[1]
if not chosen then
return nil
end
redis.call('ZINCRBY', KEYS[1], 1, chosen)
return chosenSaralangan toʻplam kalitini skriptning yagona kalit argumenti sifatida Redis mijoziingizning EVAL interfeysi orqali uzating. Boʻsh hovuz null natija beradi, dastur uni soʻrov yubormasdan hal qilishi kerak.
Nega ikkita buyruqni birlashtirish kerak?
Alohida oʻqish va oshirishlar ikki ishchiga hech biri yangilamasdan oldin bir xil minimumni koʻrish imkonini beradi. Redis Lua skriptini atomar bajaradi, shuning uchun boshqa ishchi bu skriptning oʻqishi va oshirishi orasiga tanlov qoʻya olmaydi. Skriptni qisqa tuting, chunki uning bajarilishi boshqa Redis ishini bloklaydi.
ZRANGE eng past ballni birinchi qaytaradi; teng ballar aʼzolar tartibi bilan hal qilinadi, tasodifiy emas. ZINCRBY tanlangan aʼzoning ballini keyingi taqsimot uchun bittaga oshiradi.
Ball nimani anglatishini aniqlang
Bu taqsimotlarni sanaydi, jumladan tarmoq soʻrovi keyin muvaffaqiyatsiz boʻlgan taqsimotni ham. U kechikishni, muvaffaqiyatli soʻrovlarni yoki hozir bajarilayotgan ishni oʻlchamaydi. Yagona mos aʼzoni qayta-qayta tanlash hali ham mumkin; skript uni eksklyuziv saqlamaydi.
Muvofiqlikni hovuzning salomatlik va siyosat qoidalari bilan saqlang. Agar aʼzoni olib tashlab, keyin tiklasangiz, uning tarixiy soni saqlanishi kerakmi, qaror qiling. Tikalngan proksini noldan boshlash u quvib yetguncha taqsimotlarni unga jamlashi mumkin.
Eng kam bir vaqtdagi siyosat boshqa hayot tsiklini talab qiladi, jumladan tugatish va tashlab ketilgan ishlarni boshqarish. Bu jamlangan hisoblagichni oʻsha hayot tsikli deb talqin qilmang.