2009-02-19 120 views
1

我已經實現了一個wcf服務,現在,我的客戶希望它有三個副本,獨立工作在不同的機器上。主從方法。我需要找到一個解決方案來啓用行爲:如何處理wcf服務同步?

實例化的第一個服務「詢問」另外兩個「如果他們還活着?」 - 如果不是,那麼它就成爲主人,並且它是在網上活躍的人。另外兩個,一旦實例化,看到已經有一位主人活着,所以他們成爲奴隸並開始睡覺。需要有一些機制來定期檢查主人是否沒有死亡,如果是這樣,選擇下一個活着成爲主人的副本(直到它變成死亡)

這我認爲應該是一種建築模式,所以我會很樂意得到任何建議。

感謝

回答

1

我建議看WCF等信道(System.Net.PeerToPeer),以便每個節點知道有關的其他節點。這是一個link,提供了一個體面的介紹。

至於確定哪個節點應該成爲主節點,這個技巧將在兩個或多個節點幾乎同時在線時協商哪個節點應該是主節點。一旦節點相互瞭解,就需要一些確定性機制來建立主節點。例如,您可以使用最早的創建時間,每個節點IP地址的最後一個八位字節的最低值,或者任何其他值。您只需要定義一些允許節點自動協商的方案。

最後,至於檢查主人是否還活着,我會建議使用基於事件的機制here。主人可以發送其他節點將註冊的定期健康和狀態事件。我會在代碼入口處放置一個try/catch/finally塊,這樣如果主人崩潰,它可以發佈一個最終的MasterClosing事件,讓奴隸知道它會消失。這不能解決的是系統崩潰,例如電源故障等。爲了處理這個問題,在從屬設備中提供超時,以便當超時到期時,從設備可以詢問主設備以查看它是否仍然存在。如果沒有,奴隸們可以使用你的確定性算法來談判誰應該成爲下一個主人。