Keď viacerí pracovníci zdieľajú fond cez Redis, zoradená množina môže zaviesť jednoduchú politiku: vybrať spôsobilú proxy s najmenším zaznamenaným počtom pridelení. Ukladajte identifikátor proxy ako člena a počet jej pridelení ako skóre.

Pre fond obsluhujúci povolené verejné požiadavky môže zoznam bezplatných proxy poskytnúť kandidátov na koncové body na posúdenie podľa pravidiel spôsobilosti daného fondu. Inicializujte spôsobilých členov dohodnutým počiatočným počtom. Potom urobte výber a zvýšenie jednou operáciou na strane servera:

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

Odovzdajte kľúč zoradenej množiny ako jediný kľúčový argument skriptu cez rozhranie EVAL vášho klienta Redis. Prázdny fond vracia výsledok null, ktorý musí aplikácia ošetriť bez odoslania požiadavky.

Prečo oba príkazy spájať?

Oddelené čítania a zvýšenia umožňujú dvom pracovníkom vidieť rovnaké minimum, kým ho niekto aktualizuje. Redis vykonáva skript Lua atomicky, takže iný pracovník nemôže vložiť výber medzi čítanie a zvýšenie tohto skriptu. Udržujte skript krátky, pretože jeho vykonávanie blokuje inú prácu Redisu.

ZRANGE vracia najnižšie skóre ako prvé; rovnaké skóre sa rieši poradím členov, nie náhodne. ZINCRBY zvyšuje skóre vybraného člena o jeden pre ďalšie pridelenie.

Definujte, čo skóre znamená

Počíta pridelenia, vrátane pridelenia, ktorého sieťová požiadavka neskôr zlyhá. Nemeria latenciu, úspešné požiadavky ani prácu, ktorá práve prebieha. Opakovaný výber jediného spôsobilého člena je stále možný; skript si ho nevyhradzuje výhradne.

Udržujte spôsobilosť pravidlami zdravia a politiky fondu. Ak člena odoberiete a neskôr obnovíte, rozhodnite, či sa má jeho historický počet zachovať. Spustenie obnovenej proxy od nuly môže sústrediť pridelenia na ňu, kým sa dobehne.

Politika najmenšej súbežnosti vyžaduje iný životný cyklus, vrátane dokončenia a spracovania opustených úloh. Neinterpretujte tento kumulatívny počítadlo ako ten životný cyklus.

Súvisiace články