Alocă atomic proxy-ul cel mai puțin utilizat în Redis
Folosește un set sortat și un script Lua scurt pentru a selecta și a crește numărul de alocări al unui proxy între workeri.
Când mai mulți workeri partajează un pool prin Redis, un set sortat poate implementa o politică simplă: alege proxy-ul eligibil cu cele mai puține alocări înregistrate. Stochează identificatorul proxy-ului ca membru și numărul alocărilor ca scor.
Pentru un pool care servește cereri publice permise, lista de proxy-uri gratuite poate furniza candidați de endpoint de evaluat conform regulilor de eligibilitate ale pool-ului. Inițializează membrii eligibili cu un număr de start convenit. Apoi fă selecția și incrementarea o singură operație pe server:
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 chosenTrimite cheia setului sortat ca unic argument de cheie al scriptului prin interfața EVAL a clientului tău Redis. Un pool gol produce un rezultat null pe care aplicația trebuie să îl gestioneze fără a face o cerere.
De ce să combinăm cele două comenzi?
Citirile și incrementările separate lasă doi workeri să observe același minim înainte ca vreunul să îl actualizeze. Redis execută un script Lua atomic, așa că un alt worker nu poate insera o selecție între citirea și incrementarea acestui script. Ține scriptul scurt, deoarece execuția lui blochează alte lucrări Redis.
ZRANGE returnează scorul cel mai mic primul; scorurile egale se rezolvă după ordinea membrilor, nu aleatoriu. ZINCRBY crește cu unu scorul membrului ales pentru următoarea alocare.
Definește ce înseamnă scorul
Aceasta numără alocări, inclusiv o alocare a cărei cerere de rețea eșuează ulterior. Nu măsoară latența, cererile reușite sau lucrul în curs. Selectarea repetată a singurului membru eligibil rămâne posibilă; scriptul nu îl rezervă exclusiv.
Menține eligibilitatea cu regulile de sănătate și de politică ale pool-ului. Dacă elimini un membru și îl restaurezi mai târziu, decide dacă numărul său istoric trebuie păstrat. Pornirea unui proxy restaurat de la zero poate concentra alocările asupra lui cât timp recuperează.
O politică de concurență minimă necesită un alt ciclu de viață, inclusiv finalizarea și tratarea lucrărilor abandonate. Nu interpreta acest contor cumulativ ca acel ciclu de viață.