2011-02-05 115 views
1

我想開發一個應用程序,它連接到一些輸入源並處理它讀取的消息(原則上認爲是BizTalk,但不是那麼重)。爲了提高性能和可靠性,我希望啓用服務的水平擴展,顯然通過使用共享存儲(如DB)充當消息排隊機制。用於主動/被動故障轉移羣集的.NET庫

但是,訪問諸如電子郵件或磁盤文件夾等資源的線程無法水平縮放。一次只能從該輸入源讀取一個實例。 (進一步的消息處理業務邏輯當然可以駐留在多個節點上)。

這是主動/被動羣集的完美人選。一個節點被認爲是「活動的」並且主動連接到「單實例」資源(例如電子郵件收件箱),而其他節點則是「被動」。如果「活動」節點死亡,則其他「被動」節點在它們之間選擇新的「活動」節點。

現在的問題是:在那裏有一個.NET庫,它可以幫助實現通常的故障轉移羣集邏輯? (即實施必要的心跳發送/檢測,以及「主動」節點選舉過程)。因爲我不想重新發明輪子。

我可以從已經完成的研究看:

  • 的BizTalk Server支持此功能本身,但我不使用BizTalk因爲它太笨重和昂貴的(但我想效仿它的這個功能)
  • Windows Server支持故障轉移羣集(在某些高端版本,如Windows Server 2008 Enterprise或Datacenter中),但這又是一個昂貴的解決方案(因爲每個節點都需要昂貴的許可證)
  • 有很多信息關於故障轉移算法應該如何工作,但我看不到開源在任何地方實施...(只在商業產品溢價銷售)

我知道它可能被認爲是先進和理想的功能,因此爲什麼商業解決方案是昂貴的。這很好 - 如果沒有開源實現或庫,那麼我將自行開發一個。我只是不想花費它已經存在的努力。

UPDATE 12/02/2011:找到SAForum(http://www.saforum.org/link/linkshow.asp?link_id=214720),這是一個發佈開放式服務可用性概念規範的網站。還有OpenSAF(http://www.opensaf.org/Welcome-to-OpenSAF%E2%84%A2~151213~14944.htm)以及SAForum規範的開源C++實現。看起來很全面,但非常重。要花費我很多時間來閱讀規範和文檔。它不僅涵蓋了故障轉移,還提供了完全可擴展的分佈式系統(通知,分佈式事件,鎖定,集羣管理等)的規範......仍然沒有任何.NET實現的跡象。

+0

在發生故障時您能容忍多少停機時間?一旦您擺脫真正的高可用性解決方案,許可成本就會急劇下降。自己開發它的開發工作也是如此。 – saille 2011-02-13 00:10:05

+0

假設即使是15到20分鐘也是可以忍受的(因爲這意味着工作排隊)。我只想** **自動**故障切換,以便人類不必介入。你知道哪些圖書館/解決方案? – Lev 2011-02-14 23:08:14

回答

2

當然,開發這種先進的功能自己將比商業購買更昂貴。除非你的時間被捐贈給項目,並且你沒有截止日期,否則我會排除你自己寫這個。

要獲得高可用性和水平縮放,您需要編寫一個的代碼。測試它在高可用性生產環境中的工作水平將需要相當大的努力。即使你這樣做了,你會不會相信你自己的代碼,而不是微軟的代碼,它已經在遊戲中累積了運行時間,並且已經通過了所有軟件都需要經過的多個版本才能變得成熟和穩定。

我知道你真的在問開放源代碼庫,但同樣的觀點適用 - 你會相信嗎?它是否經過了充分測試?是否經過實地驗證?

更新:好吧,這是幾年前,我想我已經軟化了我對使用開源這種關鍵任務基礎設施的可行性的立場,儘管我仍然相信有商業支持是必不可少的,並且我仍然避免自己寫。

作爲高可用性,高擴展性的消息總線,我會在這裏插入一個Rabbit MQ的插件,以便其他讀者閱讀。商業支持是可用的,其基於開放標準(AMQP)。客戶端庫可用於任何主要平臺。

相關問題