2011-09-05 9 views
7

私は、クラスタ(ローカルLAN)内の他のマシンの状態に関する知識を必要とするツールを書くことを試みています。これは、VRRPとcorosync/openaisに似たネットワークフェイルオーバー/高可用性システム用ですが、デバイスがよりインテリジェントな選択を行うために、より多くの情報(例えばリアルタイムに近い速度/性能特性など)を含めることを望みます。これは、所定の重みベースのメカニズムよりも複雑なプロトコルを使用することを意味する。クラスタ化されたすべてのマシンが互いの状態を見ることを可能にすることによって、どちらがマスターデバイスに最も適しているかを共同で合意することができる。多くのマシンに状態を分散する

私の検索では、分散状態メカニズムを提供するライブラリ(C、C++またはJavaME)は見つかりませんでした。理想的には、各マシンの状態を定期的にブロードキャスト/マルチキャストして、参加しているマシンがグローバル状態テーブルを構築し、誰がマスターになるかをすべて知ることができるものを探しています。この場合の状態は、任意のキーと値のペアです。

私は車輪を再発明したくないので、ここの誰かが私を正しい方向に向けることができるかどうか分からないのですか?

+0

Boost MPIをチェックしましたか?私はそれが分散コンピューティングのためだと思う。しかし、それがあなたを助けるかどうかは分かりません。 – Arunmu

+4

BrewerのCAP(Consistency、Availability and Partition)定理の古典的なケースのように見えます。それを読んで、実際の問題をより深く理解することができます。 – MSalters

+0

@MSalters - あなたは何を意味するのでしょうか?障害が発生するため、各ノードが他のすべての参加者の状態を100%知っていることを保証することは不可能であると私は理解しています。私が狙っているのは、良い、汎用的な目的のフレームワークで、状態を蓄積して共有することです。 OSPFやその他のルーティングプロトコルのようなものを見ると、このテクニックはspecalised領域でよく使われています。 – Mike

答えて

1

あなたの目的に合ったアプリケーションがあるかどうかはわかりません。 しかし、あなたはMPIライブラリを使って簡単なプログラムを書いて、必要な情報を放送できることを知っています。

すべてのクライアントはルートノードに状態を送信し、ルートノードはメッセージをブロードキャストします。あなたはこのために必要な

機能は以下のとおりです。

MPI_Bcast 
MPI_Send 
MPI_Recv 

C++/MPIのチュートリアルの多くはそれをグーグル、ネット上であります!

2

私があなたの場合は、memcached(memcached.org)またはnosqlの亜種の1つを調べます。

+0

yup - シンプルだが、真実 – sehe

+0

+1クリーンでシンプルな解決策で、魅力的だと思う。一方、他のシステムのインフラストラクチャ・ギズモは手作業で構築する必要があります。 – Iterator

2

Apache ZooKeeperのように聞こえるかもしれません。これは、階層型のキーバリューストアです。引用する彼らのOverview page

ZooKeeperの連携データ格納するように設計されました:それは決定するための適応を必要とするだろうが、ここで

は簡単な Leader Election recipieの例だなどのステータス情報、設定、位置情報を、いくつかの重み付けされた基準によってリーダー。

関連する問題