web-dev-qa-db-ja.com

データ複製パターン/アルゴリズム

可変数のノードに分散する必要がある一連のシステムがあります(少なくとも2つですが、8-10と考えられます)。パフォーマンス上の理由から、状態が1つでもメモリに保持され、少なくとも2つのノードに複製される必要がありますが、需要が増加すると、これはmanager。残念ながら、これですでに非常に優れている商用データグリッドを購入することはできません。

質問:状態が不変であると仮定すると、このプロセスを容易にするために使用できるパターンやアルゴリズムは何ですか?議論を容易にするためにサンプルを提供しましたが、これに縛られていません。本当に!...これらの要件を満たすための新しい方向性を選択することについて、私は全力で取り組んでいます。写真やコードサンプルを教えていただければ幸いです。

現状では、ノードの1つが自己昇格し、誰がいつ複製するかを調整します(i.e。manager)。

その他の仮定:

  • リストアイテム
  • システムはTCP/IPおよびマルチキャストを介して通信します
  • データベースなし
  • ファイル転送なし...バイト配列のみ
  • すべてのコンポーネントは現在C#であり、ほとんど何でも変更できます
  • 最終的な整合性は問題ありません

注:このサンプルでは失敗のケースは処理されません。この時点で私はそれが物事を過度に複雑にするだろうと思った

Possible sequence

7
JoeGeeky

ACIDトランザクションはなく、BASEとCAPの定理を知っています。あなたの図から私が理解しているのは、マネージャXがソースYとターゲットZをスキャンし(これは増加する可能性があります)、2つの間のレプリケーションを容易にすることです。このような場合、優れた [〜#〜] zmq [〜#〜] ライブラリとそのC#バインディングを使用できます。それはあなたのほとんどすべての問題を解決します。

それ以外の場合は、複製が簡単なMongoDBを使用できます(MongoDBはドキュメント指向のデータストアです)

トランザクションを安全にしたい場合、物事は面白くなるかもしれません。

2
Ubermensch

分散キャッシュアプ​​ローチを検討する価値があると思います。

Microsoft: http://msdn.Microsoft.com/en-us/library/ff383731.aspx

オープンソースのmemcached: http://memcached.org/

複製するデータのサイズはどれくらいですか?

1
Valery

Paxosは、複数のノード間のアクティブ-アクティブレプリケーションに使用できるアルゴリズムです。使用している(特許取得済み)バージョンでは、WAN環境で適切に機能するように拡張されています。

実装は簡単ではないように見えますが、説明されている基準を満たしているようです。

0
james creasy