3

30日ごとに(中央サーバーに接続する)タスクを実行する必要があるWindowsサービスを作成しています+ - 5日(ランダムである必要があります)。サービスは 2000 以上のクライアント マシンで実行されるため、サーバーが過負荷にならないように、それらを平準化するためのランダム性が意図されています。

これを行う最良の方法は何ですか?現在、タスクが最後に実行されてから 25 日から 35 日の間でランダムな時間を選択し、それを使用しています。

誰かがより良い方法を持っていますか?より良い方法はありますか?

4

5 に答える 5

4

あなたが持っているものは、私にはかなり良い方法のように聞こえます. 今回は 25 日後に実行された場合、次回は 30 日以上実行される可能性が高くなるように、ある程度バイアスをかけることができます

もう 1 つの方法は、中央サーバーに適切な「スロット」を要求することです。そうすれば、サーバー自体の過負荷を回避できます (すべてが自分自身で動作すると仮定します)。

于 2009-08-19T14:10:00.733 に答える
3

Jon が 2 番目のパラグラフで提案していることは確かに実行し、サーバーの次にいつ実行するかを決定するロジックを移動します。このようにして、クライアントを効果的に制御し、2000 以上のマシンにアプリを再配布することなくアルゴリズムを変更できます。

于 2009-08-19T14:28:18.183 に答える
2

サーバーは次にいつ接続するかをクライアントに伝えることができますか? その場合、サーバーは、時間間隔全体に均等に分散される「スケジュールされた接続スロット」のプールを持つことができます。サーバーはこれらを好きなように配布できるため、均等な拡散が保証されます。

于 2009-08-19T14:11:57.220 に答える
0

十分に良さそうです。使用された日をリストから削除することをお勧めします (ランダムに選択された日によって、選択されない日があるため、ある時点でその日が使用されるようにするためです!)。

于 2009-08-19T14:12:24.427 に答える
0

長期的な平準化に加えて、サーバーが容量に近づいている場合にステータス コードを返して、クライアントに後で再試行するように指示することができます。その時点で、25 ~ 35 日ではなく、1 時間ほど遅らせることができます。

于 2009-08-19T14:24:15.303 に答える