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 chosen

Vä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.

Aiheeseen liittyvät artikkelit