1

N 個の負荷分散サーバー間で分散されるオブジェクトのリストを維持したいと考えています。クライアントが 1 つのサーバーでリストを変更するたびに、これらの変更を他のサーバーに移行したいと考えています。したがって、これはマスター マスター レプリケーションの場合だと思います。これを処理する最も簡単な方法は何ですか? 1 つの単純化された事実は、リスト内のオブジェクトへの各変更には、関連付けられた増加するバージョン番号が関連付けられているということです。そのため、アイテムが 2 つの異なるサーバーで変更され、これら 2 つのデルタが 3 番目のサーバーに移動した場合、競合を解決することができます。

編集: 明確化: 私は Memcached や Redis のような分散型のキー値ストアに精通しています。それはここでは問題ではありません。私が興味を持っているのは、共有リストの競合を解決するメカニズムです。たとえば、サーバー A がリスト内の項目を変更し、サーバー B がその項目を削除した場合、競合をプログラムで解決する方法などです。

4

5 に答える 5

4

memcached をお勧めします。これは、ニーズに完全に適合する分散サーバー キャッシュ システムです。このリンクをチェックしてください:

EnyimMemcached と BeITMemcached のどちらの .NET Memcached クライアントを使用していますか?

リスト全体を渡すのがうまくいかない場合 (memcached があなたのリストを比較するのに十分賢いかどうかはわかりません)、古い DataSet オブジェクトを見てみることをお勧めします。データセットが大きい場合はデルタ。

于 2011-12-26T01:41:30.057 に答える
1

分散システムを同期するために使用できるアルゴリズムがあります。

あなたの場合、システム上で2つのイベントが発生すると、そのうちの1つが最初に発生したことを通知するアルゴリズムが必要です。最初のイベントである2つのイベントを決定できれば、すべての競合を解決できます。

ランポートクロックの使用をお勧めします。

于 2012-01-03T13:54:33.843 に答える
1

各サーバーには独自のバージョンのListローカルキャッシュがありますか、それとも集中キャッシュレイヤーを使用する予定ですか?

提案されているように、集中化されたキューから機能する集中化された「プッシュ」プロセスを持つことができます。サーバーによって送信された変更はすべてキューに入れられ、「プッシュ」プロセスは、何らかのリモート処理/Webサービスメカニズムを介してすべてのサーバーに更新をプッシュできます。

これにより、変更/更新/削除がすべてのサーバーに一度に(または時間内に)適用され、必要に応じて一元化された検証またはロギングが行われるという利点があります。これにより、複数の更新の問題も解決されます。最新の更新が優先されます。

これは、キューを管理し、アイテムを1つずつ取得し、アイテムを検証し、変更/コンテンツをログに記録し、最後にプッシュする内部キュー(復元力のためにDB非同期に永続化できます)を持つWindowsサービスとして実装されているのを見てきました。各WebサーバーへのWebService呼び出しを介したローカルList(サーバーは、必要に応じて更新/追加/削除されるだけのメモリ内リストを維持します)。

于 2011-12-30T21:49:23.833 に答える
1

変更をキューに入れます。各サーバーにキューを見てもらい、それに基づいて行動させます。

たとえば、キュ​​ーには次のものがあります。

  • 項目 33 を追加
  • アイテム #55 を削除
  • 更新項目 #22
  • 等々

変更を行ったら、キューに書き込み、各サーバーにキューからアイテムを取得させ、それに応じてリストを更新します。

このような方法でインメモリデータベースを作成しましたが、複数の「サーバー」で完全に機能しました。

編集:

サーバーがお互いに更新したい場合、それは起こらなければなりません:

更新する各サーバーは、UPDATE (または ADD または DELETE) 要求を他のすべてのサーバーのキューに入れます。各サーバーは、そのサーバーから発信されたキューに入れられたリクエストのリストも保存して、キューから独自の更新をロードしないようにする必要があります。

于 2011-12-30T17:57:27.967 に答える
0

Windows プラットフォームを使用している場合は、「 Windows Server AppFabric」、特にキャッシュ機能を確認することをお勧めします。名前はファンキーですが、まさにあなたが探しているものだと思います。

.NET アプリケーションにアプリケーション データへの高速アクセス、スケーリング、および高可用性を提供する分散インメモリ キャッシュ。

于 2011-12-30T17:43:15.650 に答える