3

MemCachedのドキュメントには、データがノード間で分散されていることが記載されています。それが分散キャッシュの定義です。ノード A がノード B にあるデータを必要とする場合、データは B から A に転送されます。A がクラッシュすると、A に保存されているすべてのデータが B で利用できなくなります。

ただし、EhCache の分散キャッシングの定義は異なります。基本的に、分散キャッシュというよりも共有メモリに似ています。ノード A が何らかのデータを変更すると、ノード B はその変更を認識します。A がクラッシュした場合、共有メモリに保存されているデータ A はノード B で引き続き利用できます。

これは私に2つの質問を導きます:

  1. それぞれ 1 GB のメモリを持つ 3 つのノード A、B、C がある場合、MemCached がメモリを追加し、ノードの合計 3 GB のメモリのように見えるように見えます。ただし、EhCache は 3 GB を追加するのではなく、各ノード間で最大 1 GB の共有メモリを許可するようです。これは正しいです?

  2. 1. に対する答えが「はい」の場合、EhCache と MemCached は実際には競合ではなく補完的であると結論付けるのは正しいですか?

4

2 に答える 2

4

私は Memcache の専門家ではないので、Ehcache が何をするかについて話します。

Ehcache は「階層型キャッシュ」です。これにより、すべての層でスケールアップおよびスケールアウトできます。Ehcache のサーバー ノードが 3 つある場合 (実際にはサーバー レイヤーは TSA、Terracotta Server Array です)、これらのサーバー ノードのそれぞれに固有のデータがあるため、ディスクにスワップできるものを含めない場合、3Gig になります。TSA は、HA やアクティブ パッシブ フェイルオーバーにディスクの永続性を使用するように構成できます。BigMemory をプラグインすると、GC の問題を心配することなく、これらの層を数百ギガの RAM に拡張できます。

では、階層型キャッシュが優れているのはなぜでしょうか? これは、クライアントのメモリをどのように使用するかです。オン ヒープとオフ ヒープのローカル層では数マイクロ秒、リモート層では数ミリ秒のプロセスで、最大数百ギガのコヒーレント データを処理できます。また、すべてのデータを HA にすることができます。

この内容の詳細については、次を参照してください。

http://scaleaholic.blogspot.com/2010/09/little-bit-about-bigmemory-for-ehcache.html

そしてここ:

http://scaleaholic.blogspot.com/2011/08/what-is-terracotta.html

そしてもちろん: ehcache.org と terracotta.org

于 2011-10-09T00:28:33.097 に答える
2

私は両方の経験があります。

私はあなたの両方の質問に「はい」と言います。

私はHibernateと一緒にehcacheを使用しています。中央データベースで見つかったデータを、クラスター内の複数のサーバーノードのメモリにキャッシュします。もちろん、データベースへのアクセスを減らす理由があります。キャッシュされた値が1つのノードによって書き込まれる場合、他のノードではこの値を無効にして、データベースから値を再読み取りし、再キャッシュするように強制する必要があります。

Memcachedデータソースとして使用しました。これは単純なkey=valueデータベースです。すべてのサービスノードで、使用できるmemcachedノードのリストを定義します。次に、いくつかのノードに書き込みます(ラウンドロビンによると思います)。キーには、値が保存されているmemcachedノードに関する情報が含まれています。

したがって、私の経験では、memcachedは、多くの場合分散型のデータベース(リレーショナルの種類ではありませんが、それでもデータベース)ですが、ehcacheはより伝統的なキャッシュです。

于 2011-10-17T23:25:05.957 に答える