Kada više radnika dijeli pool preko Redis-a, sortirani skup može implementirati jednostavnu politiku: odabrati podoban proxy s najmanje zabilježenih dodjela. Čuvajte identifikator proxyja kao člana, a njegov broj dodjela kao rezultat.

Za pool koji opslužuje dozvoljene javne zahtjeve, lista besplatnih proxyja može dati kandidate za krajnje točke koje treba procijeniti prema pravilima podobnosti tog poola. Inicijalizirajte podobne članove dogovorenim početnim brojem. Zatim napravite odabir i povećanje jednom serverskom operacijom:

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

Proslijedite ključ sortiranog skupa kao jedini argument ključa skripte kroz EVAL sučelje vašeg Redis klijenta. Prazan pool daje null rezultat koji aplikacija mora obraditi bez slanja zahtjeva.

Zašto spojiti dvije naredbe?

Odvojena čitanja i povećanja omogućuju dvama radnicima da vide isti minimum prije nego ga bilo koji ažurira. Redis izvršava Lua skriptu atomski, pa drugi radnik ne može umetnuti odabir između čitanja i povećanja ove skripte. Držite skriptu kratkom jer njeno izvršavanje blokira druge Redis poslove.

ZRANGE vraća najniži rezultat prvi; jednaki rezultati rješavaju se redoslijedom članova, ne slučajno. ZINCRBY povećava rezultat odabranog člana za jedan za sljedeću dodjelu.

Definirajte šta rezultat znači

Ovo broji dodjele, uključujući dodjelu čiji mrežni zahtjev kasnije ne uspije. Ne mjeri latenciju, uspješne zahtjeve ni rad koji je trenutno u toku. Ponovno odabiranje jedinog podobnog člana i dalje je moguće; skripta ga ne rezerviše isključivo.

Održavajte podobnost pomoću pravila zdravlja i politike poola. Ako uklonite člana i kasnije ga vratite, odlučite treba li zadržati njegov historijski broj. Pokretanje vraćenog proxyja od nule može koncentrirati dodjele na njega dok sustiže.

Politika najmanje istovremenosti zahtijeva drugačiji životni ciklus, uključujući dovršetak i rukovanje napuštenim poslovima. Ne tumačite ovaj kumulativni brojač kao takav životni ciklus.

Povezani članci