Assigna atòmicament el proxy menys utilitzat a Redis
Feu servir un conjunt ordenat i un script Lua curt per triar i incrementar el recompte d'assignacions d'un proxy entre els treballadors.
Quan diversos treballadors comparteixen un pool a través de Redis, un conjunt ordenat pot implementar una política simple: triar el proxy elegible amb menys assignacions registrades. Emmagatzemeu l'identificador del proxy com a membre i el seu recompte d'assignacions com a puntuació.
Per a un pool que serveix sol·licituds públiques permeses, la llista de proxys gratuïts pot proporcionar candidats a punt final per avaluar segons les regles d'elegibilitat d'aquell pool. Inicialitzeu els membres elegibles amb un recompte inicial acordat. Després feu la selecció i l'increment en una sola operació de servidor:
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 chosenPasseu la clau del conjunt ordenat com a únic argument de clau de l'script mitjançant la interfície EVAL del vostre client Redis. Un pool buit produeix un resultat null que l'aplicació ha de gestionar sense fer cap sol·licitud.
Per què combinar les dues ordres?
Lectures i increments separats permeten que dos treballadors observin el mateix mínim abans que cap l'actualitzi. Redis executa un script Lua de manera atòmica, així que cap altre treballador pot inserir una selecció entre la lectura i l'increment de l'script. Mantingueu l'script curt perquè la seva execució bloqueja altres feines de Redis.
ZRANGE retorna la puntuació més baixa primer; les puntuacions iguals es resolen per ordre de membre, no a l'atzar. ZINCRBY apuja la puntuació del membre triat en un per a la propera assignació.
Definiu què significa la puntuació
Això compta assignacions, incloent-hi una assignació la sol·licitud de xarxa de la qual falla després. No mesura latència, sol·licituds reeixides ni feina en curs. Encara és possible triar repetidament l'únic membre elegible; l'script no el reserva de manera exclusiva.
Manteniu l'elegibilitat amb les regles de salut i política del pool. Si retireu un membre i després el restaureu, decidiu si cal conservar el seu recompte històric. Començar un proxy restaurat a zero pot concentrar-hi assignacions mentre es posa al dia.
Una política de menys concurrència necessita un cicle de vida diferent, incloent-hi la finalització i el tractament de feines abandonades. No interpreteu aquest comptador acumulatiu com a tal cicle de vida.