Un truco probabilístico para balanceadores de carga

Tienes N servidores y un balanceador de carga. Las peticiones de trabajo llegan al balanceador y este las enruta hacia un servidor que se encarga de procesarlas. El objetivo del balanceador es tratar de conseguir un reparto más o menos uniforme de las tareas para que ningún servidor esté sobrecargado mientras otros permanecen ociosos. En términos probabilísticos, tratar de obtener una distribución uniforme (de la carga de trabajo).

Un mecanismo rudimentario de balanceo que parece que se usa por ahí es asignar las tareas al azar. Es simple y es en el fondo como muestreamos la distribución uniforme. Pero no todas las distribuciones uniformes son iguales. Por muchos motivos, son interesantes versiones de la distribución uniforme más uniformes; para convencerse de ello uno puede leer lo que Wikipedia cuenta sobre las sucesiones de Sobol o aquí sobre los ruidos azules. Con los balanceadores de carga pasa lo mismo. Así, al parecer, debe de ser una gran innovación hacer lo siguiente:

  1. Que el balanceador interrogue a dos servidores al azar.
  2. Que le mande la tarea al menos ocupado de los dos.

Con ese truco se consiguen distribuciones uniformes mejor repartidas.

Y se me ocurre pensar:

  • ¿Realmente es mejor mandar tareas a servidores al azar que recorrerlos cíclicamente? Casi seguro que no.
  • Supongo que no es viable que el balanceador interrogue a todos los servidores.
  • Y también imagino que la regla de consultar solo dos servidores habrá que replanteársela (e interrogar a más) cuando N sea grande. Al fin y al cabo, si el problema consiste en descubrir servidores con poca carga, si N es grande, aun interrogando de dos en dos, es fácil que no se acaben descubriendo máquinas con poca carga. Supongo que alguien podrá calcular el f(N) óptimo de acuerdo con algún criterio razonable de éxito.