Tildel den minst brukte proxyen atomisk i Redis
Bruk et sortert sett og et kort Lua-skript for å velge og øke en proxys tildelingstall på tvers av arbeidere.
Når flere arbeidere deler en pool gjennom Redis, kan et sortert sett gjennomføre en enkel politikk: velg den kvalifiserte proxyen med færrest registrerte tildelinger. Lagre proxyens identifikator som medlem og tildelingstallet som poengsum.
For en pool som betjener tillatte offentlige forespørsler, kan listen over gratis proxyer gi endepunktkandidater som skal vurderes etter poolens kvalifikasjonsregler. Initialiser kvalifiserte medlemmer med et avtalt starttall. Deretter gjør du 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 chosenSend nøkkelen til det sorterte settet som skriptets eneste nøkkelargument gjennom EVAL-grensesnittet til Redis-klienten din. En tom pool gir et null-resultat som applikasjonen må håndtere uten å sende en forespørsel.
Hvorfor kombinere de to kommandoene?
Adskilte 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 skyte 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 poengsummen til det valgte medlemmet 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 kvalifikasjonen med poolens helse- og policyregler. Hvis du fjerner et medlem og senere gjenoppretter det, må du avgjøre om det historiske tallet skal beholdes. Å starte en gjenopprettet proxy på null kan samle tildelinger på den mens den tar igjen.
En politikk for minst samtidighet krever en annen livssyklus, inkludert fullføring og håndtering av forlatte jobber. Ikke tolk denne kumulative telleren som den livssyklusen.