Вопрос

Я пишу службу Windows, которая должна выполнять задачу (которая подключается к центральному серверу) каждые 30 дней +- 5 дней (оно должно быть случайным).Служба будет работать на более чем 2000 клиентских машинах, поэтому случайность предназначена для их выравнивания и предотвращения перегрузки сервера.

Как лучше всего это сделать?В настоящее время я выбираю случайное время между 25 и 35 днями с момента последнего запуска задачи и использую его.

Есть ли у кого-нибудь лучший способ?Есть ли способ лучше?

Это было полезно?

Решение

То, что у вас есть, мне кажется очень хорошим способом.Ты мощь Я хочу несколько сместить его, чтобы, если в этот раз он будет выполнен через 25 дней, в следующий раз он с большей вероятностью будет выполнен через более чем 30 дней, если вы понимаете, о чем я.

Другая альтернатива заключается в том, что вы можете запросить у центрального сервера соответствующий «слот» - таким образом он сможет избежать перегрузки (при условии, что все ведет себя само по себе).

Другие советы

Я бы, конечно, сделал то, что предлагает Джон во втором абзаце, и переместил бы логику, решающую, когда выполняться, на сервер.Таким образом, вы фактически держите клиентов под своим контролем и можете вносить изменения в свой алгоритм без необходимости перераспределения приложения на более чем 2000 компьютеров.

Может ли сервер сообщить клиенту, когда в следующий раз подключиться?В этом случае на сервере может быть пул «слотов запланированных подключений», которые равномерно распределены по временному интервалу.Сервер может распределять их по своему усмотрению и, таким образом, обеспечивать равномерное распространение.

Кажется, достаточно хорошо.Возможно, вы захотите удалить каждый день из списка по мере его использования (чтобы гарантировать, что каждый день будет использован в какой-то момент, поскольку некоторые из случайно выбранных дней могут никогда не быть выбраны!).

Помимо долгосрочного выравнивания, вы можете заставить сервер возвращать код состояния, если его емкость близка к пределу, с указанием клиенту повторить попытку позже.В этот момент вы могли бы просто отложить час или около того, а не 25-35 дней.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top