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 chosen

Geef 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.

Gerelateerde artikelen