När flera arbetare delar en pool via Redis kan en sorterad mängd genomföra en enkel policy: välj den kvalificerade proxyn med minst registrerade tilldelningar. Lagra en proxyidentifierare som medlem och dess tilldelningstal som poäng.

För en pool som betjänar tillåtna offentliga förfrågningar kan listan över gratis proxyservrar tillhandahålla slutpunktskandidater att utvärdera enligt poolens behörighetsregler. Initiera kvalificerade medlemmar med ett överenskommet starttal. Gör sedan valet och ökningen till en enda serveråtgärd:

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 chosen

Skicka den sorterade mängdens nyckel som skriptets enda nyckelargument via Redis-klientens EVAL-gränssnitt. En tom pool ger ett null-resultat som applikationen måste hantera utan att skicka en förfrågan.

Varför kombinera de två kommandona?

Separat läsning och ökning låter två arbetare se samma minimum innan någon uppdaterar det. Redis kör ett Lua-skript atomiskt, så en annan arbetare kan inte skjuta in ett val mellan skriptets läsning och ökning. Håll skriptet kort eftersom körningen blockerar annat Redis-arbete.

ZRANGE returnerar den lägsta poängen först; lika poäng avgörs av medlemsordningen, inte slumpmässigt. ZINCRBY höjer den valda medlemmens poäng med ett för nästa tilldelning.

Definiera vad poängen betyder

Detta räknar tilldelningar, inklusive en tilldelning vars nätverksbegäran senare misslyckas. Det mäter inte latens, lyckade förfrågningar eller pågående arbete. Det är fortfarande möjligt att välja den enda kvalificerade medlemmen upprepade gånger; skriptet reserverar den inte exklusivt.

Upprätthåll kvalifikationen med poolens hälso- och policyregler. Om du tar bort en medlem och senare återställer den, avgör om dess historiska antal ska behållas. Att starta en återställd proxy på noll kan koncentrera tilldelningar på den medan den kommer ikapp.

En policy för minst samtidighet kräver en annan livscykel, inklusive slutförande och hantering av övergivna jobb. Tolka inte denna kumulativa räknare som den livscykeln.

Relaterade artiklar