Asignar de forma atómica o proxy menos usado en Redis
Use un conxunto ordenado e un script Lua curto para seleccionar e incrementar o contador de asignacións dun proxy entre os traballadores.
Cando varios traballadores comparten un grupo a través de Redis, un conxunto ordenado pode implementar unha política simple: escoller o proxy elixible con menos asignacións rexistradas. Garde o identificador do proxy como membro e o seu contador de asignacións como puntuación.
Para un grupo que atende solicitudes públicas permitidas, a lista de proxies gratuítos pode fornecer candidatos de extremo para avaliar segundo as regras de elixibilidade dese grupo. Inicialice os membros elixibles cun contador inicial acordado. Despois faga a selección e o incremento nunha soa operación do 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 chosenPase a clave do conxunto ordenado como único argumento de clave do script mediante a interface EVAL do seu cliente Redis. Un grupo baleiro produce un resultado nulo que a aplicación debe tratar sen facer unha solicitude.
Por que combinar os dous comandos?
As lecturas e incrementos separados permiten que dous traballadores observen o mesmo mínimo antes de que calquera o actualice. Redis executa un script Lua de forma atómica, así que outro traballador non pode inserir unha selección entre a lectura e o incremento deste script. Manteña o script curto porque a súa execución bloquea outro traballo de Redis.
ZRANGE devolve primeiro a puntuación máis baixa; as puntuacións iguais resólvense pola orde dos membros, non ao azar. ZINCRBY sobe un a puntuación do membro elixido para a seguinte asignación.
Defina que significa a puntuación
Isto conta asignacións, incluída unha asignación cuxa solicitude de rede falla despois. Non mide latencia, solicitudes exitosas nin traballo en curso. Segue a ser posible escoller repetidamente o único membro elixible; o script non o reserva en exclusiva.
Manteña a elixibilidade coas regras de saúde e política do grupo. Se retira un membro e despois o restaura, decida se se debe conservar o seu contador histórico. Comezar un proxy restaurado en cero pode concentrar nel as asignacións mentres se pon ao día.
Unha política de menor concorrencia necesita outro ciclo de vida, incluída a finalización e o tratamento de tarefas abandonadas. Non interprete este contador acumulativo como ese ciclo de vida.