Allokoi vähiten käytetty välityspalvelin atomisesti Redisissä
Käytä järjestettyä joukkoa ja lyhyttä Lua-skriptiä välityspalvelimen allokointimäärän valintaan ja kasvattamiseen työntekijöiden kesken.
Kun useat työntekijät jakavat altaan Redisin kautta, järjestetty joukko voi toteuttaa yksinkertaisen käytännön: valitse kelvollinen välityspalvelin, jolla on vähiten kirjattuja allokointeja. Tallenna välityspalvelimen tunniste jäseneksi ja sen allokointimäärä pisteytykseksi.
Altaalle, joka palvelee sallittuja julkisia pyyntöjä, ilmaisten välityspalvelimien luettelo voi tarjota päätepiste-ehdokkaita arvioitavaksi altaan kelpoisuussääntöjen mukaan. Alusta kelvolliset jäsenet sovitulla aloitusmäärällä. Tee sitten valinta ja kasvatus yhtenä palvelinpuolen toimintona:
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 chosenVälitä järjestetyn joukon avain skriptin ainoana avainargumenttina Redis-asiakkaasi EVAL-rajapinnan kautta. Tyhjä allas tuottaa null-tuloksen, jota sovelluksen on käsiteltävä tekemättä pyyntöä.
Miksi yhdistää kaksi komentoa?
Erilliset luvut ja kasvatukset antavat kahden työntekijän nähdä saman minimin ennen kuin kumpikaan päivittää sitä. Redis suorittaa Lua-skriptin atomisesti, joten toinen työntekijä ei voi lisätä valintaa tämän skriptin luvun ja kasvatuksen väliin. Pidä skripti lyhyenä, koska sen suoritus estää muun Redisin työn.
ZRANGE palauttaa alimman pisteytyksen ensin; yhtäläiset pisteytykset ratkaistaan jäsenten järjestyksellä, ei satunnaisesti. ZINCRBY nostaa valitun jäsenen pisteytystä yhdellä seuraavaa allokointia varten.
Määritä, mitä pisteytys tarkoittaa
Tämä laskee allokointeja, mukaan lukien allokointi, jonka verkkopyyntö epäonnistuu myöhemmin. Se ei mittaa viivettä, onnistuneita pyyntöjä tai parhaillaan käynnissä olevaa työtä. Ainoan kelvollisen jäsenen valitseminen toistuvasti on edelleen mahdollista; skripti ei varaa sitä yksinomaan.
Ylläpidä kelpoisuutta altaan terveys- ja käytäntösäännöillä. Jos poistat jäsenen ja palautat sen myöhemmin, päätä säilytetäänkö sen historiallinen määrä. Palautetun välityspalvelimen aloittaminen nollasta voi keskittää allokointeja sille sen kuroessa kiinni.
Vähimmän samanaikaisuuden käytäntö vaatii erilaisen elinkaaren, mukaan lukien valmistuminen ja hylättyjen töiden käsittely. Älä tulkitse tätä kumulatiivista laskuria siksi elinkaareksi.