2011-02-23 101 views
3

我想找出創建簡單工作委託的主 - 工作者體系結構的最佳方法。主服務器和工作服務器之間的.NET處理隊列通信

1主的過程,代表工作的幾個工作進程。 - 主人需要不斷運行並將工作委託給工作人員(並執行其他任務)。 - 工作人員(在不同的服務器上)只需要接收工作,處理工作並回報。 - 主進程將收到一個作業隊列,並將它們委派給工作節點,然後這些工作節點將處理該請求並通知主服務器該作業已處理。主人不需要等待工人完成,但可以委託工作,然後在工人完成工作時收到工人的更新。

什麼將是促進在.NET這種溝通的最佳方式?我已經有了類庫來完成作業處理,但我正在尋找一種良好的溝通方法。

MSMQ? Windows服務? 遠程處理?

感謝

+0

您的可靠性要求是什麼?主人和工作人員是否會在地理位置上傳播,還是始終在同一局域網上運行? – tenor 2011-02-23 22:18:34

+0

他們都將在同一局域網中運行。 此外,主人將需要接收.net網絡應用程序的輸入(如果這可以相當容易地完成),否則,它會通過定期輪詢數據庫來接收更新。 – Summit 2011-02-24 03:33:51

回答

3

出於這樣的目的,我使用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我們收到的信息太陳舊了。

+0

我會用tcp綁定進一步研究WCF。感謝您的建議。任何偉大的鏈接(如果你沒有任何的頭頂,不要擔心,我一定會自己研究這個) – Summit 2011-02-24 03:40:03

+0

TCP綁定的主要內容是它們支持回調(你定義了一個與從服務器以異步方式回覆主服務器的一些方法接口 - HTTP或MSMQ無法實現)。如果我找到任何有用的鏈接,我會更新我的答案。 – 2011-02-24 03:47:53

3

MSMQ是一種消息傳輸協議,它應該適用於您的情況,因爲主服務器不需要工作人員的即時響應 - 「火警和遺忘」。而且,它可以讓工人們在備份時下井並收到一連串的信息。您可以使用WCF作爲MSMQ的抽象 - MSMQ是一種綁定。至於託管,Windows服務是一個選項,雖然你可能想看看AppFabric,它承載的服務作爲IIS網站。藉助Windows Server 2008 R2中提供的新的自動啓動功能,這是Windows服務的完美替代方案,尤其適用於您的類型的應用程序。

+0

AppFabric會讓主人更容易通過網絡服務接收通知嗎?我們的其他要求之一是主人從外部網絡應用程序接收輸入。非常感謝 – Summit 2011-02-24 03:37:37

+0

實際上,它看起來像我們將無法使用AppFabric,因爲我們將在Windows Server 2003上進行託管。它看起來非常強大,但我會記住這將用於未來的項目 – Summit 2011-02-24 05:01:32