Tildel den mindst brugte proxy atomisk i Redis
Brug et sorteret sæt og et kort Lua-script til at vælge og øge en proxys tildelingstal på tværs af arbejdere.
Når flere arbejdere deler en pulje via Redis, kan et sorteret sæt implementere en enkel politik: vælg den kvalificerede proxy med færrest registrerede tildelinger. Gem en proxyidentifikator som medlem og dens tildelingstal som score.
Til en pulje, der betjener tilladte offentlige anmodninger, kan listen over gratis proxyer levere endpoint-kandidater, som skal vurderes efter puljens kvalifikationsregler. Initialiser kvalificerede medlemmer med et aftalt starttal. Gør derefter valget og forøgelsen til én server-side operation:
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 chosenSend det sorterede sæts nøgle som scriptets eneste nøgleargument gennem din Redis-klients EVAL-grænseflade. En tom pulje giver et null-resultat, som applikationen skal håndtere uden at sende en anmodning.
Hvorfor kombinere de to kommandoer?
Adskilte læsninger og forøgelser lader to arbejdere se det samme minimum, før nogen opdaterer det. Redis kører et Lua-script atomisk, så en anden arbejder kan ikke indsætte et valg mellem scriptets læsning og forøgelse. Hold scriptet kort, fordi dets kørsel blokerer andet Redis-arbejde.
ZRANGE returnerer den laveste score først; lige scores afgøres af medlemsrækkefølgen, ikke tilfældigt. ZINCRBY hæver det valgte medlems score med én til den næste tildeling.
Definer, hvad scoren betyder
Dette tæller tildelinger, inklusive en tildeling, hvis netværksanmodning senere fejler. Det måler ikke latenstid, vellykkede anmodninger eller arbejde, der er i gang. Det er stadig muligt at vælge det eneste kvalificerede medlem gentagne gange; scriptet reserverer det ikke eksklusivt.
Oprethold kvalifikation med puljens sundheds- og politikregler. Hvis du fjerner et medlem og senere gendanner det, skal du beslutte, om dets historiske tal skal bevares. At starte en gendannet proxy på nul kan samle tildelinger på den, mens den indhenter.
En politik for mindst samtidige kræver en anden livscyklus, inklusive afslutning og håndtering af forladte job. Fortolk ikke denne kumulative tæller som den livscyklus.