2009-08-19 6 views
3

私は、(中央サーバに接続する)タスクを30日おきに実行する必要のあるWindowsサービスを作成しています。+ 5日間(ランダムである必要があります)。このサービスは2000以上のクライアントマシン上で実行されるため、ランダム性はサーバーを過負荷にしないようにレベルを上げることを意図しています。あいまいスケジューリング

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

もっと良い方法がありますか?より良い方法がありますか?

答えて

4

私にはかなり良い方法のように聞こえます。あなたはかもしれませんこれは25日後に実行された場合、次回30日以上実行する可能性が高いので、もし私が何を意味するのか分かります。

もう1つの方法は、中央サーバーに適切な「スロット」を求めることができるということです。これにより、すべてが自分自身を過負荷にすることを避けることができます。

+0

バイアスについての非常に良い考えは、それを考えなかった。サーバーを可能な限りシンプルに保つために、クライアントが時々接続されるという事実に加えて、実際にスロットのルートに行くことはできません。 – Gareth

+0

バイアスが良い考えであるかどうか分かりません。ランダムにすると、バイアスは30日間のサイクルを強制しようとするため、アクセス時間が早く広がります。 –

+0

@Juozas:はい。 1つのクライアントが35日に1回だけ数回連続してサーバーを呼び出すと、問題がどれほど重要かは、一度に起動するクライアントの数が多いかどうかによって大きく左右されます。 –

2

サーバーは、次に接続するときにクライアントに通知できますか?そうであれば、サーバは、時間間隔全体にわたって均等に分配される「スケジュールされた接続スロット」のプールを有することができる。サーバーは、好きなようにこれらを配布して、均一な普及を保証することができます。

0

十分に良いと思われます。あなたは、毎日をリストから削除したいかもしれません(毎日、ランダムに選択されたものが決して選択されないように、ある日に使用されるようにするためです)。

0

長期間のレベル付けの上に、クライアントが後で再試行するよう指示する容量が近い場合、サーバーにステータスコードが返されるようにすることができます。その時点で、25-35日ではなく、1時間ほど遅らせることができます。

3

Jonが2番目の段落で示したことを確信して、サーバーの横に実行するタイミングを決定するロジックを移動します。こうすることで、効果的にクライアントをコントロールすることができ、2000年以上のマシンにアプリを再配布することなくアルゴリズムを変更することができます。

関連する問題