2009-08-19 47 views
3

我正在寫一個windows服務,需要每30天+ - 5天(它需要是隨機的)執行任務(連接到中央服務器)。該服務將在2000多臺客戶端機器上運行,因此隨機性意味着將它們調平,以便服務器不會超載。模糊調度

這樣做的最好方法是什麼?目前,我選擇了自上次運行並使用該任務後的25到35天之間的隨機時間。

有沒有人有更好的方法?有沒有更好的辦法?

回答

4

你有什麼聽起來像一個很好的方式給我。你可能希望有點偏向它,如果它在25天后執行,這次更有可能在下次超過30天內執行,如果你明白我的意思。

另一種選擇是你可以向中央服務器請求一個合適的「插槽」 - 這樣可以避免自身過載(假設所有事情都是自己的)。

+0

對偏見很好的想法,沒有想到這一點。我們試圖儘可能保持服務器的簡單性,還增加了偶爾連接客戶端的事實,我們無法真正走槽路線。 – Gareth 2009-08-19 14:14:38

+0

我不確定偏見是否是一個好主意。隨機,訪問時間會更快分散,因爲偏見會嘗試執行30天的週期。 – 2009-08-19 14:18:13

+0

@Juozas:是的。這實際上取決於是否會有一羣客戶端一次啓動,如果(比如說)一個客戶端連續幾次每35天只調用一次服務器,它就會有多重要。 – 2009-08-19 14:23:26

2

服務器可以在下次連接時告訴客戶端嗎?如果是這樣的話,服務器可以有一個在所有時間間隔內均勻分佈的「預定連接時隙」池。服務器可以按照喜好分發這些內容,從而確保傳播。

0

似乎不夠好。你可能想要從列表中刪除每一天,因爲它們被使用(以確保每一天在某個點被使用,因爲隨機選擇的一些可能永遠不會被選中!)。

0

在長期平衡的基礎上,如果服務器接近容量,則可以返回狀態碼,指示客戶端稍後重試。那時你可以延遲一個小時左右,而不是25-35天。

3

我肯定會做Jon在第二段中提出的建議,並且移動邏輯以決定何時在服務器旁執行。這樣,您就可以有效地讓客戶端掌控自己,並且可以對算法進行更改,而無需將應用程序重新分配給您的2000多臺計算機。