Actualmente tengo un sistema en el que el servidor indica a todas las aplicaciones cliente cuándo conectarse próximamente al servidor entre una ventana de tiempo configurada por el servidor (por ejemplo, 12 a 6 am, hora del cliente).Distribución ponderada no aleatoria
El algoritmo actual hace un mod del número de identificación de 10 dígitos del cliente (bastante distribuido) por el número de segundos en la ventana de tiempo y proporciona un tiempo bastante uniformemente distribuido y predecible para que cada cliente se conecte al servidor. El problema ahora es que los clientes se encuentran en diferentes zonas horarias desproporcionadamente, y ciertas zonas horarias se superponen para la ventana dada, por lo que el efecto neto es que la carga no se distribuye uniformemente en el servidor. Lo que me gustaría es diseñar un algoritmo que pueda configurar con un porcentaje de clientes que tenemos actualmente para cada zona horaria, y hacer que distribuya el siguiente tiempo de conexión del cliente entre la ventana que da como resultado una carga uniforme en el servidor de una manera eso es predecible (no aleatorio).
aquí es una sencilla representación gráfica:
12AM 1AM 2AM 3AM 4AM 5AM 6AM GMT
GMT -4 40% of the clients ||||||||||||||||||||||||||||||
GMT -5 10% of the clients ||||||||||||||||||||||||||||||
GMT -6 20% of the clients ||||||||||||||||||||||||||||||
GMT -7 30% of the clients ||||||||||||||||||||||||||||||
El algoritmo actual es determinista. Supongo que ese es un requisito. ¿El servidor no puede simplemente recordar el tiempo de reconexión esperado de cada cliente? –
Sí, tiene que seguir siendo determinista. No puede variar día a día y debe poder calcularse sin otra transacción para leerlo o conservarlo. – duckworth
Para cada cliente que se conecta, ¿conoce su zona horaria? Afectará qué algoritmos son posibles. –