我正在编写一个 Windows 服务,该服务需要每 30 天 +- 5 天执行一次任务(连接到中央服务器)(它需要是随机的)。该服务将在 2000 多台客户端计算机上运行,因此随机性旨在使它们保持平衡,以免服务器过载。
最好的方法是什么?目前,我在任务上次运行后 25 到 35 天之间随机选择一个时间并使用它。
有没有人有更好的方法?有没有更好的办法?
我正在编写一个 Windows 服务,该服务需要每 30 天 +- 5 天执行一次任务(连接到中央服务器)(它需要是随机的)。该服务将在 2000 多台客户端计算机上运行,因此随机性旨在使它们保持平衡,以免服务器过载。
最好的方法是什么?目前,我在任务上次运行后 25 到 35 天之间随机选择一个时间并使用它。
有没有人有更好的方法?有没有更好的办法?
你所拥有的对我来说听起来是个不错的方法。您可能希望对其进行一些偏差,以便如果这次它在 25 天后执行,那么下次它更有可能在 30 天以上执行,如果您明白我的意思的话。
另一种选择是您可以向中央服务器询问适当的“插槽” - 这样它可以避免自身过载(假设一切都自行运行)。
我当然会按照 Jon 在第二段中的建议去做,并移动逻辑来决定何时在服务器旁边执行。通过这种方式,您可以有效地控制客户端,并且可以更改您的算法,而无需将应用程序重新分发到您的 2000 多台机器上。
服务器可以告诉客户端下次连接的时间吗?如果是这样,服务器可以拥有一个在整个时间间隔内均匀分布的“预定连接槽”池。服务器可以随意分发这些,从而确保均匀分布。
似乎足够好。您可能希望在使用时从列表中删除每一天(以确保每一天都在某个时刻被使用,因为随机选择的一些可能永远不会被选中!)。
除了长期平衡之外,如果服务器接近容量,您可以让服务器返回一个状态代码,指示客户端稍后再试。那时你可以只延迟一个小时左右,而不是 25-35 天。