Kad vairāki darbinieki koplieto pūlu, izmantojot Redis, sakārtota kopa var ieviest vienkāršu politiku: izvēlēties piemērotu starpniekserveri ar vismazāk reģistrētiem piešķīrumiem. Glabājiet starpniekservera identifikatoru kā locekli un tā piešķīrumu skaitu kā punktus.

Pūlam, kas apkalpo atļautus publiskus pieprasījumus, bezmaksas starpniekserveru saraksts var nodrošināt galapunktu kandidātus, kas jānovērtē pēc šī pūla atbilstības noteikumiem. Inicializējiet piemērotos locekļus ar saskaņotu sākuma skaitu. Pēc tam izveidojiet atlasi un palielināšanu par vienu servera puses darbību:

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

Nododiet sakārtotās kopas atslēgu kā vienīgo skripta atslēgas argumentu caur sava Redis klienta EVAL saskarni. Tukšs pūls dod null rezultātu, kas lietotnei jāapstrādā, neveicot pieprasījumu.

Kāpēc apvienot abas komandas?

Atsevišķas nolasīšanas un palielināšanas ļauj diviem darbiniekiem redzēt to pašu minimumu, pirms kāds to atjaunina. Redis izpilda Lua skriptu atomiski, tāpēc cits darbinieks nevar ievietot atlasi starp šī skripta nolasīšanu un palielināšanu. Turiet skriptu īsu, jo tā izpilde bloķē citu Redis darbu.

ZRANGE atgriež zemāko punktu skaitu vispirms; vienādi punkti tiek risināti pēc locekļu secības, nevis nejauši. ZINCRBY palielina izvēlētā locekļa punktus par vienu nākamajam piešķīrumam.

Definējiet, ko nozīmē punkti

Tas skaita piešķīrumus, tostarp piešķīrumu, kura tīkla pieprasījums vēlāk neizdodas. Tas nemēra aizturi, veiksmīgus pieprasījumus vai pašlaik notiekošo darbu. Joprojām ir iespējams atkārtoti izvēlēties vienīgo piemēroto locekli; skripts to neaizņem ekskluzīvi.

Uzturiet atbilstību ar pūla veselības un politikas noteikumiem. Ja noņemat locekli un vēlāk to atjaunojat, izlemiet, vai saglabāt tā vēsturisko skaitu. Atjaunotā starpniekservera palaišana no nulles var koncentrēt piešķīrumus uz to, kamēr tas panāk.

Vismazākā vienlaicīguma politikai nepieciešams cits dzīves cikls, tostarp pabeigšana un pamestu darbu apstrāde. Neinterpretējiet šo kumulatīvo skaitītāju kā to dzīves ciklu.

Saistītie raksti