В настоящее время у меня есть система, в которой сервер сообщает всем клиентским приложениям, когда к следующему подключению к серверу между настроенным временем сервера (например, время отклика от 12 до 6 часов).Не случайное взвешенное распределение
В текущем алгоритме используется код 10-значного идентификационного номера клиента (довольно распределенный) на количество секунд в окне времени и дает довольно равномерно распределенное, прогнозируемое время для каждого клиента для подключения к серверу. Проблема в том, что клиенты находятся в разных часовых поясах несоразмерно, а определенные временные зоны перекрываются для данного окна, поэтому сетевой эффект заключается в том, что загрузка не распределяется равномерно на сервере. Я хотел бы разработать алгоритм, который я мог бы сконфигурировать с процентом клиентов, которые мы сейчас имеем для каждого часового пояса, и распространить его следующее время соединения между окном, которое приводит к равномерной нагрузке на сервер способом что является предсказуемым (неслучайным).
здесь простое графическое представление:
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 ||||||||||||||||||||||||||||||
Текущий алгоритм детерминирован. Полагаю, это требование? Сервер не может просто помнить время ожидания повторного подключения каждого клиента? –
Да, он должен оставаться детерминированным. Он не может меняться изо дня в день и должен быть рассчитан без другой транзакции для чтения или сохранения. – duckworth
Для каждого клиента, который подключается, вы знаете свой часовой пояс? Это повлияет на то, какие алгоритмы возможны. –