Amikor több munkás osztozik egy poolon Redis-en keresztül, egy rendezett halmaz egyszerű szabályt valósíthat meg: a legkevesebb rögzített kiosztással rendelkező jogosult proxy kiválasztása. Tárolja a proxy azonosítóját tagként, kiosztásszámát pedig pontszámként.

Egy engedélyezett nyilvános kéréseket kiszolgáló poolhoz az ingyenes proxy lista adhat végpont-jelölteket, amelyeket a pool jogosultsági szabályai szerint kell értékelni. Inicializálja a jogosult tagokat egyeztetett kezdőszámmal. Ezután a kiválasztást és a növelést tegye egyetlen kiszolgálóoldali műveletté:

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

Adja át a rendezett halmaz kulcsát a szkript egyetlen kulcsargumentumaként Redis-ügyfele EVAL felületén keresztül. Az üres pool null eredményt ad, amelyet az alkalmazásnak kérés nélkül kell kezelnie.

Miért érdemes összevonni a két parancsot?

A külön olvasások és növelések lehetővé teszik, hogy két munkás ugyanazt a minimumot lássa, mielőtt bármelyik frissíti. A Redis atomikusan hajtja végre a Lua-szkriptet, így egy másik munkás nem szúrhat be választást a szkript olvasása és növelése közé. Tartsa rövidnek a szkriptet, mert a végrehajtása blokkolja a többi Redis-munkát.

A ZRANGE a legalacsonyabb pontszámot adja vissza először; az egyenlő pontszámokat a tagok sorrendje dönti el, nem véletlenszerűen. A ZINCRBY eggyel növeli a kiválasztott tag pontszámát a következő kiosztáshoz.

Határozza meg, mit jelent a pontszám

Ez kiosztásokat számol, beleértve azt a kiosztást is, amelynek hálózati kérése később meghiúsul. Nem méri a késleltetést, a sikeres kéréseket vagy a folyamatban lévő munkát. Továbbra is lehetséges az egyetlen jogosult tag ismételt kiválasztása; a szkript nem foglalja le kizárólagosan.

Tartsa fenn a jogosultságot a pool állapot- és szabályrendszerével. Ha eltávolít egy tagot, majd később visszaállítja, döntse el, megmaradjon-e a történeti száma. Egy visszaállított proxy nulláról indítása összpontosíthatja rá a kiosztásokat, amíg behozza a lemaradást.

A legkisebb egyidejűség szabálya más életciklust igényel, beleértve a befejezést és az elhagyott feladatok kezelését. Ne értelmezze ezt a kumulatív számlálót azként az életciklusként.

Kapcsolódó cikkek