Ken die minste gebruikte proxy atomies in Redis toe
Gebruik 'n gesorteerde versameling en 'n kort Lua-skrip om 'n proxy se toewysingstelling oor werkers te kies en te verhoog.
Wanneer verskeie werkers 'n poel via Redis deel, kan 'n gesorteerde versameling 'n eenvoudige beleid implementeer: kies die geskikte proxy met die minste aangetekende toewysings. Stoor 'n proxy-identifiseerder as die lid en sy toewysingstelling as die telling.
Vir 'n poel wat toegelate openbare versoeke bedien, kan die gratis proxy-lys eindpuntkandidate verskaf om volgens daardie poel se geskiktheidsreëls te evalueer. Initialiseer geskikte lede met 'n ooreengekome begintelling. Maak dan seleksie en verhoging een bedienerkant-operasie:
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 chosenGee die gesorteerde versameling se sleutel as die skrip se enigste sleutelargument deur jou Redis-kliënt se EVAL-koppelvlak. 'n Leë poel lewer 'n null-resultaat wat die toepassing moet verwerk sonder om 'n versoek te maak.
Waarom die twee opdragte kombineer?
Aparte lees en verhogings laat twee werkers dieselfde minimum sien voordat enigeen dit opdateer. Redis voer 'n Lua-skrip atomies uit, so 'n ander werker kan nie 'n seleksie tussen hierdie skrip se lees en verhoging invoeg nie. Hou die skrip kort, want die uitvoering daarvan blokkeer ander Redis-werk.
ZRANGE gee die laagste telling eerste terug; gelyke tellings word deur ledeorde beslis, nie lukraak nie. ZINCRBY verhoog die gekose lid se telling met een vir die volgende toewysing.
Definieer wat die telling beteken
Dit tel toewysings, insluitend 'n toewysing waarvan die netwerkversoek later misluk. Dit meet nie latensie, suksesvolle versoeke of werk wat tans aan die gang is nie. Dit bly moontlik om herhaaldelik die enigste geskikte lid te kies; die skrip reserveer dit nie eksklusief nie.
Handhaaf geskiktheid volgens die poel se gesondheids- en beleidsreëls. As jy 'n lid verwyder en later herstel, besluit of sy historiese telling behou moet word. Om 'n herstelde proxy op nul te begin kan toewysings op hom konsentreer terwyl hy inhaal.
'n Minste-gelyktydige beleid benodig 'n ander lewensiklus, insluitend voltooiing en hantering van verlate take. Moenie hierdie kumulatiewe teller as daardie lewensiklus interpreteer nie.