出於這樣的目的,我使用WCF用的net.tcp綁定,具有回調接口,讓主控程序知道工作已完成(是的,它被稱爲「MCP」時,啓動工作的流程稱爲「Sark」,網絡被稱爲「遊戲網格」,請參閱圖)。
「Sark」既作爲控制檯應用程序又作爲Windows服務實現(爲便於開發並「將腳趾頭」插入新的工作器),而MCP則是一個長時間運行的GUI。如果我要重新實施它,我可能也會將主控制器設置爲Windows服務,但是IT部門有必要查看計劃的作業,並在備份作業或其他維護任務時暫停MCP過期了。今天,我仍然使MCP成爲一項服務,併爲其提供GUI「遠程控制」。
的工作被寫爲淨DLL組件與調用任務的接口。 「Sark」會將最新版本的二進制文件複製到文件共享中,創建一個新的AppDomain,在該AppDomain中加載並運行作業,然後在完成時關閉它。這使得無需重新啓動MCP或「Sarks」就可以更新作業。
另外,每個「薩克」實例也用於MSMQ與短命消息(10秒的超時)來報告每個工人機上的負載。然後,MCP將使用加權隨機選擇來選擇要派遣工作的工人機器。也就是說:如果一臺機器報告它有80%空閒,那麼它將得到80票「選票」來執行下一個計劃任務,這意味着它比只有10%閒置的機器更有可能。這是在避免熱點的同時均勻分配負載的合理有效方式。
我選擇的net.tcp的WCF結合調度工作,收到的結果,因爲「射後不理」,沒有在實踐中很好地工作。發生故障:會出現內存不足的異常,服務器運行時出現問題(主要原因是任務需要使用FoxPro表,而Microsoft的ODBC FoxPro驅動程序沒有進入64位系統)當我們混合使用32位和64位工作機時,這是一個問題),或者因爲出現了一些意想不到的突發事件,例如當工作人員使用的IP地址受到想要通話的機器的防火牆限制時至。對回調的直接響應使MCP可以選擇將作業重新分配給另一臺機器上的另一名工人。
但是,MSMQ非常適合報告工作機器的健康狀況,因爲MCP不必爲了工人報告其負擔而運行MCP,並且消息的短暫超時意味着MCP wouldn我們收到的信息太陳舊了。
您的可靠性要求是什麼?主人和工作人員是否會在地理位置上傳播,還是始終在同一局域網上運行? – tenor 2011-02-23 22:18:34
他們都將在同一局域網中運行。 此外,主人將需要接收.net網絡應用程序的輸入(如果這可以相當容易地完成),否則,它會通過定期輪詢數據庫來接收更新。 – Summit 2011-02-24 03:33:51