2011-09-05 71 views
7

我在寫一個需要了解羣集(本地局域網)中其他機器狀態的工具。這是針對類似於VRRP和corosync/openais的網絡故障轉移/高可用性系統,但是我希望包含更多信息(例如接近實時的速度/性能特徵),以便設備可以做出更明智的選擇。這意味着使用比預定的基於權重的機制更復雜的協議:通過允許所有羣集機器看到彼此的狀態,他們可以共同地認同哪個最適合作爲主設備。在多臺機器上分配狀態

從我的搜索,我還沒有發現,提供分佈式狀態機制的任何(C,C++或的JavaME)庫。理想情況下,我正在尋找一些能夠定期廣播/多播每個機器狀態的內容,以便參與機器可以建立一個全局狀態表,並且所有人都可以看到主機應該是誰。在這種情況下狀態是任意的鍵/值對。

我寧願不重新發明輪子的任何所以我想知道如果在這裏任何人都可以在正確的方向指向我?

+0

你檢查了Boost MPI嗎?我認爲這是分佈式計算。但不知道它是否會幫助你。 – Arunmu

+4

看起來像布魯爾的CAP(一致性,可用性和分區)定理的經典案例。閱讀這些內容可以讓你更好地理解真正的問題。 – MSalters

+0

@MSalters - 不確定你的意思?我知道,不可能保證每個節點都100%瞭解所有其他參與者的狀態,因爲中斷將會發生。分裂的視野將會發生等我所要求的是一個好的,通用的目的框架,積累和分享國家。如果你看看OSPF和其他各種路由協議,你會發現這種技術在規範化的領域很好用。 – Mike

回答

1

我不知道是否有你的目的或沒有任何應用程序。 但是我知道你可以用MPI庫編寫一個簡單的程序並且廣播你想要的任何信息。

所有客戶可以將他們的狀態根節點,然後根節點廣播消息。你需要爲這個

功能是:

MPI_Bcast 
MPI_Send 
MPI_Recv 

有很多關於C++/MPI教程網,它只是谷歌!

2

如果我是你,我會調查的memcached(memcached.org)或NoSQL的變種之一。

+0

是 - 簡單但真實的 – sehe

+0

+1這是一個乾淨,簡單的解決方案,我覺得很有吸引力。另一方面,所有來自其他系統的基礎設施小玩意兒都必須手工製作。 – Iterator

2

這聽起來像Apache ZooKeeper可能是一個很好的匹配。它是分佈式的分層鍵值存儲。引述他們的Overview page

的ZooKeeper設計用於存儲協調數據:狀態信息,配置,位置信息等

下面是一個簡單的Leader Election recipie爲例,雖然它需要適應確定領導者通過某種加權標準。