web-dev-qa-db-ja.com

分散キャッシュとは何ですか?

分散キャッシュの概念について混乱しています。私はそれがグーグル検索から何であるかをちょっと知っています。分散キャッシュは複数のサーバーにまたがって、サイズとトランザクション容量を増やすことができます。しかし、私はそれがどのように機能するのか、どのようにデータを配布するのかを本当に理解していません。

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

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

2番目の質問は、私は通常Word サーバーノードを聞いたことです。それは何ですか?上記の例では、サーバーAはサーバーノードですよね?

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

48
Joey
  1. はい、サーバーaのデータの半分とサーバーbのデータの半分が分散キャッシュになります。データを配布するには多くの方法がありますが、キーのハッシュのようなものが最も人気があるようです。

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

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

37
nirvana

分散キャッシュソリューション(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から取得されます。これはアプリケーションに対してシームレスであり、キャッシュによって自動的に管理されますシステム。

2
Shoeb Lodhi