Når flere arbeidere deler en pool via Redis, kan et sortert sett implementere en enkel policy: velg den kvalifiserte proxyen med færrest registrerte tildelinger. Lagre en proxyidentifikator som medlem og tildelingstallet som poengsum.

For en pool som betjener tillatte offentlige forespørsler, kan listen over gratis proxyer levere endepunktkandidater som skal vurderes etter poolens kvalifikasjonsregler. Initialiser kvalifiserte medlemmer med et avtalt starttall. Gjør deretter valget og økningen til én operasjon på serversiden:

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

Send det sorterte settets nøkkel som skriptets eneste nøkkelargument gjennom Redis-klientens EVAL-grensesnitt. En tom pool gir et null-resultat som applikasjonen må håndtere uten å sende en forespørsel.

Hvorfor kombinere de to kommandoene?

Atskilte lesinger og økninger lar to arbeidere se samme minimum før noen oppdaterer det. Redis kjører et Lua-skript atomisk, så en annen arbeider kan ikke sette inn et valg mellom skriptets lesing og økning. Hold skriptet kort fordi kjøringen blokkerer annet Redis-arbeid.

ZRANGE returnerer den laveste poengsummen først; like poengsummer avgjøres av medlemsrekkefølgen, ikke tilfeldig. ZINCRBY øker den valgte medlemmens poengsum med én for neste tildeling.

Definer hva poengsummen betyr

Dette teller tildelinger, inkludert en tildeling der nettverksforespørselen senere feiler. Det måler ikke latens, vellykkede forespørsler eller arbeid som pågår. Det er fortsatt mulig å velge det eneste kvalifiserte medlemmet gjentatte ganger; skriptet reserverer det ikke eksklusivt.

Oppretthold kvalifikasjon med poolens helse- og policyregler. Hvis du fjerner et medlem og senere gjenoppretter det, må du bestemme om det historiske tallet skal beholdes. Å starte en gjenopprettet proxy på null kan samle tildelinger på den mens den henter seg inn.

En policy for minst samtidige krever en annen livssyklus, inkludert fullføring og håndtering av forlatte jobber. Ikke tolk denne kumulative telleren som den livssyklusen.

Relaterte artikler