Redis-də ən az istifadə olunan proksini atomik şəkildə ayır
Sıralanmış çoxluq və qısa Lua skripti ilə proksinin ayrılma sayını işçilər arasında seçib artırın.
Bir neçə işçi Redis vasitəsilə eyni hovuzu paylaşırsa, sıralanmış çoxluq sadə siyasət tətbiq edə bilər: ən az qeydə alınmış ayrılma sayına malik uyğun proksini seçmək. Proksinin identifikatorunu üzv, ayrılma sayını isə bal kimi saxlayın.
İcazə verilmiş ictimai sorğulara xidmət edən hovuz üçün pulsuz proksi siyahısı həmin hovuzun uyğunluq qaydalarına əsasən qiymətləndiriləcək son nöqtə namizədləri verə bilər. Uyğun üzvləri razılaşdırılmış başlanğıc sayı ilə işə salın. Sonra seçimi və artımı bir server tərəfli əməliyyat kimi edin:
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 chosenSıralanmış çoxluğun açarını skriptin yeganə açar arqumenti kimi Redis müştərinizin EVAL interfeysi ilə ötürün. Boş hovuz null nəticə verir və tətbiq sorğu göndərmədən onu idarə etməlidir.
Niyə iki əmri birləşdirməli?
Ayrı oxuma və artımlar iki işçiyə heç biri yeniləməzdən əvvəl eyni minimumu görməyə imkan verir. Redis Lua skriptini atomik icra edir, ona görə başqa işçi bu skriptin oxuması ilə artımı arasına seçim qoya bilməz. Skripti qısa saxlayın, çünki onun icrası digər Redis işlərini bloklayır.
ZRANGE ən aşağı balı birinci qaytarır; bərabər ballar təsadüfi deyil, üzv sırası ilə həll olunur. ZINCRBY seçilmiş üzvün balını növbəti ayrılma üçün bir artırır.
Balın nə demək olduğunu müəyyən edin
Bu, ayrılmaları sayır, o cümlədən şəbəkə sorğusu sonradan uğursuz olan ayrılmanı. Gecikməni, uğurlu sorğuları və ya hazırda davam edən işi ölçmür. Yeganə uyğun üzvü təkrar-təkrar seçmək hələ də mümkündür; skript onu müstəsna olaraq rezerv etmir.
Uyğunluğu hovuzun sağlamlıq və siyasət qaydaları ilə qoruyun. Əgər üzvü çıxarıb sonra bərpa etsəniz, onun tarixi sayının saxlanılıb-saxlanılmayacağına qərar verin. Bərpa olunmuş proksini sıfırdan başlatmaq, o yetişənə qədər ayrılmaları onun üzərində cəmləyə bilər.
Ən az eyni vaxtlı siyasət fərqli həyat dövrü tələb edir, o cümlədən tamamlanma və tərk edilmiş işlərin idarəsi. Bu kumulyativ sayğacı həmin həyat dövrü kimi şərh etməyin.