62

分散キャッシュの概念について混乱しています。私はそれが何であるかをGoogle検索からちょっと知っています。分散キャッシュは複数のサーバーにまたがる場合があるため、サイズとトランザクション容量を拡大できます。しかし、それがどのように機能するか、またはデータがどのように配布されるかはよくわかりません。

たとえば、データ 1、2、3、4、5、6、7、8、9、10、および2 つのキャッシュ サーバー A および B があるとします。分散キャッシュを使用する場合、考えられる解決策の 1 つは、データ 1、3、5、7、9 をキャッシュ サーバー A に格納し、2、4、6、8、10 をキャッシュ サーバー B に格納することです。

それで、これは正しいですか、それとも私はそれを誤解しましたか?

2 番目の質問は、サーバー ノードという言葉をよく耳にすることです。それは何ですか?上記の例では、サーバー A はサーバー ノードですよね?

3 番目の質問です。サーバー (サーバー A としましょう) がダウンした場合、どうすればよいでしょうか? 上記の例が正しければ、サーバー A がダウンしているときにキャッシュからデータ 1、3、5、7、9 を取得できない場合、キャッシュ サーバーはこの場合に何ができるでしょうか?

4

2 に答える 2

48
  1. はい、サーバー a のデータの半分とサーバー b の半分は分散キャッシュになります。データを配布する方法はたくさんありますが、キーの何らかのハッシュ化が最も一般的であるようです。

  2. 一般に、サーバーとノードという用語は同じ意味です。通常、ノードは何らかのコレクションの単一ユニットであり、多くの場合クラスターと呼ばれます。通常、サーバーは単一のハードウェアです。erlang では、1 つのサーバー上で erlang ランタイムの複数のインスタンスを実行できるため、複数の erlang ノードが必要になりますが、一般的には、より最適なスケジューリングのために、サーバーごとに 1 つのノードが必要になります。(分散されていない言語とプラットフォームの場合は、ニーズに基づいてプロセスを管理する必要があります。)

  3. キャッシュ サーバーであるサーバーがダウンした場合、データは元のソースから取得する必要があります。EG: キャッシュは、通常、すばやく取得できるように設計されたメモリ ベースのデータベースです。キャッシュ内のデータは、定期的に使用されている限り保持され、最終的には削除されます。ただし、永続性が必要な分散システムの場合、一般的な手法は複数のコピーを持つことです。例: サーバー A、B、C、D、E、および F があります。データ 1 については、A に配置し、B と C にコピーを配置します。Couchbase と Riak がこれを行います。データ 2 の場合、B にあり、C と D にコピーすることができます。この方法では、1 つのサーバーがダウンしても、2 つのコピーが残ります。

于 2013-03-17T05:48:29.497 に答える
7

私はかなり長い間分散キャッシング ソリューション (NCache 、AppFabric など) を使用しており、分散キャッシングの経験に基づいて 3 つの質問すべてに回答します。

1: 分散キャッシュ ソリューションでは、キャッシュ クラスターを作成することで、すべてのサーバーにデータを保持できます。2 つのキャッシュ サーバー (サーバー ノード) があり、キャッシュに 10 個のアイテムを追加したとします。理想的には、キャッシュ クラスター内の複数のサーバー間でデータ負荷が分散されるため、両方のサーバー ノードに 5 つのアイテムが存在する必要があります。これは通常、ハッシュとインテリジェントなデータ分散アルゴリズムを使用して実現されます。その結果、データ要求の負荷もすべてのキャッシュ サーバー間で分割され、キャッシュ クラスター内のサーバーが増えるにつれて、国境を越えた容量が直線的に増加します。

2: キャッシュ クラスタには、サーバー ノードとも呼ばれる多数のサーバー マシンを含めることができます。はい、サーバー A は、この例ではサーバー ノードまたはサーバー マシンです。

3: 通常、分散キャッシュ システムは、レプリケーション サポートを使用することで非常に信頼性が高くなります。1 つまたは複数のサーバーがダウンし、レプリケーションが有効になっている場合、データの損失やダウンタイムは発生しません。NCache には、レプリケートされたトポロジや、各サーバーのデータが他のサーバーにもレプリケートされるレプリカ トポロジのパーティションなど、これに取り組むためのさまざまな類型があります。1 つのサーバーがダウンした場合、そのサーバーのレプリケートされたデータは、生き残ったサーバー ノードから自動的に利用できるようになります。

あなたの例では、サーバー A(1, 3, 5, 7, 9) のデータはサーバー B (2, 4, 6, 8, 10) に複製され、その逆も同様です。サーバー A がダウンした場合、サーバー B に存在するサーバー A のデータが利用可能になり、そこから使用されるため、データの損失は発生しません。したがって、サーバー A がダウンし、アプリケーションがデータを要求した場合 (1)、サーバー B にはサーバー A のすべてのデータのバックアップが含まれているため、このデータはサーバー B から取得されます。これはアプリケーションに対してシームレスであり、キャッシュによって自動的に管理されます。システム。

于 2018-06-04T06:33:07.197 に答える