Den am wenigsten genutzten Proxy atomar in Redis zuweisen
Mit einem sortierten Set und einem kurzen Lua-Skript den Zuweisungszähler einer Proxy über Worker hinweg auswählen und erhöhen.
Wenn mehrere Worker einen Pool über Redis teilen, kann ein sortiertes Set eine einfache Richtlinie umsetzen: die zulässige Proxy mit den wenigsten erfassten Zuweisungen wählen. Speichere eine Proxy-Kennung als Member und ihren Zuweisungszähler als Score.
Für einen Pool, der erlaubte öffentliche Anfragen bedient, kann die Liste kostenloser Proxys Endpunkt-Kandidaten liefern, die nach den Zulässigkeitsregeln dieses Pools zu bewerten sind. Initialisiere zulässige Member mit einem vereinbarten Startzähler. Fasse dann Auswahl und Erhöhung in einer serverseitigen Operation zusammen:
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Übergib den Schlüssel des sortierten Sets als einziges Schlüsselargument des Skripts über die EVAL-Schnittstelle deines Redis-Clients. Ein leerer Pool liefert ein Null-Ergebnis, das die Anwendung behandeln muss, ohne eine Anfrage zu stellen.
Warum beide Befehle kombinieren?
Getrennte Lesevorgänge und Erhöhungen lassen zwei Worker dasselbe Minimum sehen, bevor einer es aktualisiert. Redis führt ein Lua-Skript atomar aus, daher kann ein anderer Worker keine Auswahl zwischen Lesen und Erhöhen dieses Skripts einschieben. Halte das Skript kurz, denn seine Ausführung blockiert andere Redis-Arbeit.
ZRANGE gibt den niedrigsten Score zuerst zurück; gleiche Scores werden durch die Member-Reihenfolge entschieden, nicht zufällig. ZINCRBY erhöht den Score des gewählten Members um eins für die nächste Zuweisung.
Definiere, was der Score bedeutet
Dies zählt Zuweisungen, auch eine Zuweisung, deren Netzwerkanfrage später fehlschlägt. Es misst weder Latenz noch erfolgreiche Anfragen oder gerade laufende Arbeit. Ein wiederholtes Auswählen des einzigen zulässigen Members bleibt möglich; das Skript reserviert es nicht exklusiv.
Halte die Zulässigkeit anhand der Gesundheits- und Richtlinienregeln des Pools aufrecht. Wenn du ein Member entfernst und später wiederherstellst, entscheide, ob sein historischer Zähler erhalten bleiben soll. Eine wiederhergestellte Proxy bei null zu starten, kann Zuweisungen auf sie konzentrieren, während sie aufholt.
Eine Richtlinie der geringsten Gleichzeitigkeit braucht einen anderen Lebenszyklus, einschließlich Abschluss und Behandlung aufgegebener Aufgaben. Interpretiere diesen kumulativen Zähler nicht als diesen Lebenszyklus.