De minst gebruikte proxy atomair toewijzen in Redis
Gebruik een gesorteerde set en een kort Lua-script om de toewijzingsteller van een proxy tussen workers te kiezen en te verhogen.
Wanneer meerdere workers een pool via Redis delen, kan een gesorteerde set een eenvoudig beleid uitvoeren: kies de toegestane proxy met de minste geregistreerde toewijzingen. Bewaar een proxy-identificatie als lid en het aantal toewijzingen als score.
Voor een pool die toegestane openbare verzoeken bedient, kan de lijst met gratis proxy's eindpuntkandidaten leveren die volgens de geschiktheidsregels van die pool moeten worden beoordeeld. Initialiseer toegestane leden met een afgesproken begintelling. Maak daarna de selectie en verhoging één server-side bewerking:
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 chosenGeef de sleutel van de gesorteerde set als enige sleutelargument van het script door via de EVAL-interface van je Redis-client. Een lege pool levert een null-resultaat dat de applicatie moet afhandelen zonder een verzoek te doen.
Waarom de twee commando's combineren?
Gescheiden lezingen en verhogingen laten twee workers hetzelfde minimum zien voordat een van beide het bijwerkt. Redis voert een Lua-script atomair uit, dus een andere worker kan geen selectie invoegen tussen het lezen en verhogen van dit script. Houd het script kort, want de uitvoering blokkeert ander Redis-werk.
ZRANGE geeft de laagste score eerst terug; gelijke scores worden beslecht door lidvolgorde, niet willekeurig. ZINCRBY verhoogt de score van het gekozen lid met één voor de volgende toewijzing.
Definieer wat de score betekent
Dit telt toewijzingen, inclusief een toewijzing waarvan het netwerkverzoek later mislukt. Het meet geen latentie, geslaagde verzoeken of werk dat nu loopt. Het blijft mogelijk het enige toegestane lid herhaaldelijk te kiezen; het script reserveert het niet exclusief.
Behoud geschiktheid met de gezondheids- en beleidsregels van de pool. Als je een lid verwijdert en later herstelt, beslis dan of het historische aantal behouden blijft. Een herstelde proxy op nul starten kan toewijzingen op haar concentreren terwijl ze bijtrekt.
Een beleid van minste gelijktijdigheid vereist een andere levenscyclus, inclusief voltooiing en afhandeling van achtergelaten taken. Interpreteer deze cumulatieve teller niet als die levenscyclus.