Útdeila tí minst nýtta proxy atomiskt í Redis
Brúka eitt raðað sett og eitt stutt Lua-skript til at velja og hækka útdeilingartalið hjá eini proxy ímillum arbeiðarar.
Tá fleiri arbeiðarar deila eini savning gjøgnum Redis, kann eitt raðað sett gera eina einfalda reglu: vel ta hægnu proxy við fæstum skrásettum útdeilingum. Goym eitt proxy-identitet sum lim og útdeilingartalið sum stig.
Fyri eina savning, sum tænir loyvdum almennum fyrispurningum, kann listin við ókeypis proxyum veita endapunkts-evni til at meta eftir hægnisreglum savningarinnar. Byrja hægnu limini við einum sáttmálanum byrjanartali. Ger so valið og hækkingina til eina tænastusíðu-operatión:
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 chosenSend lykilin í raðaða settinum sum einasta lykilargument skriptsins gjøgnum EVAL-veitarflatan í tínum Redis-kunda. Ein tóm savning gevur eina null-úrslit, sum applikatiónin má viðgera uttan at gera ein fyrispurning.
Hví um at seta tær báðar boðini saman?
Aðskildar lesingar og hækkingar lata tveir arbeiðarar síggja sama minimum, áðrenn nakar dagførir tað. Redis røkir eitt Lua-skript atomiskt, so ein annar arbeiðari kann ikki seta eitt val millum lesing og hækking hesa skriptsins. Halt skriptið stutt, tí røkslan blokkerar annað Redis-arbeiði.
ZRANGE gevur lægsta stigið fyrst; eins stig verða avgjørd eftir limarøð, ikki tilvildarligt. ZINCRBY hækkar stigið hjá tí valda liminum við einum til næstu útdeiling.
Greina, hvat stigið merkir
Hetta telur útdeilingar, eisini eina útdeiling, hvis netfyrispurningur seinni miseydnast. Tað málist ikki svaratíð, eydnaðir fyrispurningar ella arbeiði, sum er í gongd. Tað er framvegis gjørligt at velja tí einasta hægna liminum aftur og aftur; skriptið bókar ikki hann einsamalt.
Halt hægni við heilsu- og regluverkum savningarinnar. Um tú tekur eitt lim burtur og endursetur tað seinni, tak so avgerð um, hvørt søguliga talið skal varðveitast. At byrja eina endursetta proxy á null kann savna útdeilingar á hana, meðan hon nær aftur.
Ein regla um minst samtíðugt krevur ein annan lívsinsgongd, eisini fullføring og viðgerð av yvirgivnum arbeiðum. Tulka ikki hendan uppsavnaða teljaran sum tann lívsinsgongdin.