Tildel den minst brukte proxyen atomisk i Redis
Bruk eit sortert sett og eit kort Lua-skript for å velje og auke tildelingstalet til ein proxy mellom arbeidarar.
Når fleire arbeidarar deler ein pool via Redis, kan eit sortert sett gjennomføre ein enkel politikk: vel den kvalifiserte proxyen med færrast registrerte tildelingar. Lagre ein proxyidentifikator som medlem og tildelingstalet som poengsum.
For ein pool som tener tillatne offentlege førespurnader, kan lista over gratis proxyar levera endepunktkandidatar som skal vurderast etter kvalifikasjonsreglane til poolen. Initialiser kvalifiserte medlemmer med eit avtalt starttal. Gjer deretter valet og auken til éin operasjon på serversida:
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 det einaste nøkkelargumentet til skriptet gjennom EVAL-grensesnittet til Redis-klienten din. Ein tom pool gir eit null-resultat som applikasjonen må handtere utan å senda ein førespurnad.
Kvifor kombinere dei to kommandoane?
Skilde lesingar og aukar lèt to arbeidarar sjå same minimum før nokon oppdaterer det. Redis køyrer eit Lua-skript atomisk, så ein annan arbeidar kan ikkje setje inn eit val mellom lesinga og auken til dette skriptet. Hald skriptet kort fordi køyringa blokkerer anna Redis-arbeid.
ZRANGE returnerer den lågaste poengsummen først; like poengsummar blir avgjorde av medlemsrekkjefølgja, ikkje tilfeldig. ZINCRBY aukar poengsummen til det valde medlemmet med éin for neste tildeling.
Definer kva poengsummen tyder
Dette tel tildelingar, også ei tildeling der nettverksførespurnaden seinare feilar. Det måler ikkje latens, vellukka førespurnader eller arbeid som pågår. Det er framleis mogleg å velje det einaste kvalifiserte medlemmet gjentekne gonger; skriptet reserverer det ikkje eksklusivt.
Hald kvalifikasjonen ved lag med helse- og policyreglane til poolen. Viss du fjernar eit medlem og seinare gjenopprettar det, må du avgjere om det historiske talet skal haldast. Å starte ein gjenoppretta proxy på null kan samle tildelingar på han medan han hentar seg inn.
Ein politikk for minst samtidige krev ein annan livssyklus, inkludert fullføring og handtering av forlatne jobbar. Ikkje tolk denne kumulative teljaren som den livssyklusen.