線形スケーラビリティのためのキャッシングトポロジ

NCache さまざまなキャッシングトポロジを提供して、データの一貫性と信頼性を維持しながら線形スケーラビリティを実現します。 これの目標は、非常に小さいXNUMXサーバーキャッシュで実行されているアプリケーションから、数十または数百のキャッシュサーバーで構成される非常に大きいキャッシュクラスターのニーズに対応することです。 キャッシングトポロジは、基本的に、複数のキャッシュサーバーにまたがるクラスター化されたキャッシュでのデータストレージ、データレプリケーション、およびクライアント接続戦略です。

以下は、主なキャッシングトポロジです。 NCache 提供:

  1. パーティション化されたキャッシュ
  2. パーティション-レプリカキャッシュ
  3. 複製されたキャッシュ
  4. ミラーリングされたキャッシュ (2ノードアクティブ/パッシブ)
  5. クライアントキャッシュ (InProc Speed;クラスター化されたキャッシュに接続されたローカルキャッシュ)

参照データとトランザクションデータ

参照データはあまり頻繁に変更されないデータであり、キャッシュして何度も何度もアクセスし、ときどき更新します。 一方、トランザクションデータは非常に頻繁に変更されるデータであり、読み取るたびに更新することができます。

価格があまり頻繁に変更されない製品カタログをキャッシュすることは、参照データです。 一方、ASP.NET Core セッションは、数秒ごとに発生する可能性のあるWeb要求ごとにXNUMX回読み取られて更新されるため、セッションストレージはトランザクション使用と見なされます。

初期のキャッシュは、頻繁に変更されるデータが古くなり、データベース内の最新のデータと同期しなくなるため、主に参照データに適していると考えられていました。 だが、 NCache キャッシュがデータベースとの同期を維持できるようにする非常に強力な機能を提供するようになりました。

すべてのキャッシングトポロジは参照データに適していますが、トランザクションデータに特に適しているのは一部のキャッシングトポロジのみです。 どのトポロジが最適かを判断するには、実行する読み取りと書き込みの数を決定する必要があります。 さらに、一部のキャッシングトポロジは、更新のために特別にスケーリングされないため、それも覚えておいてください。

以下は、キャッシュトポロジと、読み取りと書き込みへの影響のリストです。

  1. パーティション化されたキャッシュ(レプリケーションなし): とても良い。 読み取りと書き込みの両方で超高速であり、サーバーを追加することで線形に拡張します。 最速のトポロジですが、データを複製しないため、キャッシュサーバーがダウンした場合にデータが失われます。
  2. パーティション-レプリカキャッシュ (最も人気のある): とても良い。 読み取りと書き込みの両方で超高速であり、サーバーを追加することで線形に拡張します。 XNUMX番目に高速なトポロジですが、線形スケーラビリティを損なうことなく、信頼性のためにデータを複製します。 速度/スケーラビリティとデータの信頼性の最良の組み合わせ。
  3. 複製されたキャッシュ: 小規模な環境に最適。 超高速で線形にスケーラブルな読み取り。 2ノードクラスターでの書き込みは適度に高速ですが、書き込みはすべてのキャッシュサーバーで同期的に実行されるため、サーバーを追加しても拡張できません。
  4. ミラーリングされたキャッシュ: 小規模な環境に最適。 読み取り用の超高速。 書き込みは、2ノードアクティブ/パッシブのレプリケートキャッシュよりも高速です。 ただし、これを超えてスケ​​ーリングすることはありません。
  5. クライアントキャッシュ: 読み取り中心の使用に非常に適しています すべてのキャッシングトポロジで。 分散キャッシュを使用してInProcの速度を実現できます。

パーティション化されたキャッシュ

パーティション化されたキャッシュは、読み取りと書き込みの両方で最も高速でスケーラブルなキャッシュトポロジです。 これは大規模なキャッシュクラスターを対象としており、ピーク負荷の下でも読み取りと書き込みのパフォーマンスは非常に良好です。 ただし、データを複製しないため、キャッシュサーバーがダウンするとデータが失われます。

パーティション化されたキャッシュ

パーティション化されたキャッシュのいくつかの特徴は次のとおりです。

  1. 動的パーティション: キャッシュは実行時にパーティションに分割され、各キャッシュサーバーには1000つのパーティションがあります。 クラスタ化されたキャッシュごとに合計XNUMX個のバケットがあり、すべてのパーティションに均等に分散されています。 キャッシュサーバーを追加/削除すると、実行時にパーティションが作成/削除されます。 データがキャッシュに追加されているとき、パーティションへのバケットの割り当ては変更されません。 代わりに、パーティションが追加または削除されたとき、またはデータバランシングが発生したときにのみ変更されます(以下を参照)。
  2. 分布図: キャッシュクラスターは、どのバケットがどのパーティションに存在するかに関する情報を含む配布マップを作成します。 パーティションマップは、パーティションが追加または削除されるたび、またはデータバランシングが発生するたびに更新されます(以下を参照)。 配布マップは、すべてのサーバーとクライアントに伝達されます。 クライアントはこれを使用して、特定のキャッシュされたアイテムの読み取りまたは書き込みのために通信するキャッシュサーバーを特定します。
  3. 動的データバランシング: すべてのバケットは実際にはキーのハッシュアルゴリズムに基づいてデータが保存されるHashMapバケットであるため、使用されたキーによっては、一部のバケットに他のバケットよりも多くのデータが含まれる可能性があります。 この不均衡が構成可能なしきい値を超えた場合、 NCache この負荷のバランスをとるために、バケットを自動的に移動します。
  4. クライアントはすべてのパーティションに接続します: クライアントはすべてのキャッシュサーバーに接続するため、サーバーからのXNUMXつのリクエストでデータを直接読み書きできます。 クライアントのキャッシュサーバーとの接続がダウンした場合、クライアントは他のサーバーのXNUMXつに、アクセスできないサーバー上に存在するキャッシュされたアイテムの読み取りまたは書き込みを要求します。 そして、そのサーバーはクライアントがそれを達成するのを助けます。

パーティション-レプリカキャッシュ

注:パーティション化されたキャッシュで言及されていることはすべて、ここでも当てはまります。

と同じように パーティション化されたキャッシュ、Partition-Replica Cacheは、読み取りと書き込みの両方で非常に高速で線形にスケーラブルなキャッシュトポロジです。 これは大規模なキャッシュクラスターを対象としており、ピーク負荷の下でも読み取りと書き込みのパフォーマンスは非常に良好です。 さらに、Partition-Replica Cacheはデータを複製するため、キャッシュサーバーがダウンしてもデータが失われることはありません。

パーティション-レプリカキャッシュは私たちの 最も人気のあるキャッシングトポロジ パフォーマンス/線形スケーラビリティとデータの信頼性の両方の長所を提供するためです。

パーティション-レプリカキャッシュ

以下は、Partition-ReplicaCacheの特徴の一部です。

  1. 動的パーティション: と同じ パーティション化されたキャッシュ.
  2. 動的レプリカ: 実行時にパーティションが作成または削除されると、それらのレプリカも作成または削除されます。 レプリカは常に別のキャッシュサーバー上にあり、パーティションにはレプリカがXNUMXつだけあります。
  3. 非同期レプリケーション: デフォルトでは、パーティションからレプリカへのレプリケーションは非同期です。 これは、クライアントがパーティション内のデータを追加、更新、または削除でき、これらすべての操作がキューに入れられることを意味します。 そして、レプリカのバルクで複製されます。 これによりパフォーマンスは向上しますが、パーティションが実行され、すべての更新がレプリカに複製されていない場合に、データが失われるリスクがわずかにあります。 しかし、ほとんどの場合、これはまったく問題ありません。
  4. 同期レプリケーション: データが非常に機密性が高く(財務データなど)、古いデータを保持する余裕がない場合は、構成で[レプリケーションの同期]オプションを選択できます。 選択すると、すべての書き込み操作は、完了したと見なされるまで、パーティションとレプリカの両方で同期的に実行されます。 このように、レプリカで操作が失敗すると、パーティションでも失敗します。 また、キャッシュ内のすべてのデータ(パーティションとレプリカの両方)が常に一貫していることを保証できます。 ただし、これは非同期レプリケーションよりも遅いため、パフォーマンスに影響します。
  5. 分布図: と同じ パーティション化されたキャッシュ.
  6. 動的データバランシング(パーティションとレプリカ): と同じ パーティション化されたキャッシュ。 ただし、パーティション-レプリカキャッシュでは、パーティションがデータバランシングされている場合、レプリカでもデータバランシングが発生します。
  7. クライアントはすべてのパーティションに接続します: と同じ パーティション化されたキャッシュ。 さらに、Partition-Replica Cacheでは、クライアントはパーティションとのみ通信し、レプリカとは通信しません。 これは、レプリカがパッシブであり、データをレプリカに複製するときに、パーティションのみがレプリカと通信するためです。

複製されたキャッシュ

レプリケートされたキャッシュは、2つ以上のキャッシュサーバーでのレプリケーションを通じてデータの信頼性を提供します。 読み取りは非常に高速でスケーラブルです。 ただし、書き込みはクラスター内のすべてのサーバーと同期しているため、書き込みには対応していません。 XNUMXノードクラスターの場合、書き込みはデータベースより高速ですが、データベースほど高速ではありません パーティション-レプリカキャッシュ。 3つ以上のサーバークラスターの場合、書き込みパフォーマンスが低下し、最終的に魅力がなくなります。

複製されたキャッシュ

以下は、レプリケートされたキャッシュの特徴の一部です。

  1. 動的複製ノード: キャッシュまたはアプリケーションを停止することなく、実行時に既存のキャッシュにキャッシュサーバーを追加または削除できます。 新しく追加されたサーバーは、キャッシュ全体のコピー(レプリカ)をそれ自体に作成します。 また、削除されたサーバーはクラスターメンバーシップを更新し、そのすべてのクライアントは他のサーバーに移動します。
  2. 各ノードのキャッシュ全体: キャッシュ全体がクラスター内のすべてのサーバーにコピーされます。
  3. 読み取りはスケーラブルです: サーバーを追加すると、読み取りは超高速でスケーラブルになります。 ただし、新しく追加されたサーバーはキャッシュ全体の単なる別のコピーであるため、サーバーを追加してもキャッシュサイズは増加しません。
  4. 書き込みは同期ですus: 書き込みは2ノードクラスターでは非常に高速で、データベースよりも高速です。 ただし、書き込みは同期的です。つまり、すべてのキャッシュサーバーが同期的に更新されるまで、各書き込み操作は完了しません。 このため、書き込みは他のトポロジほど高速ではなく、クラスターサイズを2ノードを超えて増やすとパフォーマンスが低下します。
  5. クライアントはXNUMX台のサーバーにのみ接続します: 各キャッシュクライアントは、キャッシュサーバーによって決定された負荷分散アルゴリズムに基づいて、クラスター内のXNUMXつのサーバーにのみ接続します。 このキャッシュサーバーがダウンした場合、クライアントはリスト内の次のサーバーに接続します。 負荷分散を使用したくない場合は、キャッシュ構成ファイルで接続するサーバーを手動で指定することもできます。

ミラーリングされたキャッシュ

ミラーリングされたキャッシュは、小規模な環境を対象とした2ノードのアクティブ/パッシブキャッシュクラスターです。 アクティブノードからパッシブノードへの非同期レプリケーション/ミラーリングを通じてデータの信頼性を提供します。 読み取りと書き込みの両方で非常に高速です(実際、書き込みはより高速です 複製されたキャッシュ)ただし、この2ノードのアクティブ/パッシブクラスターを超えて拡張することはできません。

ミラーリングされたキャッシュ

以下は、ミラーリングされたキャッシュの特徴の一部です。

  1. 1つのアクティブサーバーと1つのパッシブサーバー: ミラーリングされたキャッシュにはXNUMX台のサーバーしかありません。 XNUMXつはアクティブで、もうXNUMXつはパッシブです。 どちらもキャッシュ全体のコピーを持っています。 アクティブサーバーがダウンすると、パッシブサーバーは自動的にアクティブになります。 また、以前にダウンしたアクティブサーバーが復旧した場合、実行時に管理ツールを使用してこの指定を変更しない限り、パッシブサーバーとして扱われます。
  2. フェイルオーバーをサポートするクライアント接続: 各キャッシュクライアントは、クラスター内のアクティブサーバーに接続して、読み取りおよび書き込み操作を実行するだけです。 このアクティブサーバーがダウンした場合、すべてのクライアントは、これまでにアクティブになったパッシブサーバーに自動的に接続します。 このフェイルオーバーのサポートにより、サーバーがダウンした場合でも、ミラーリングされたキャッシュが常に稼働していることが保証されます。
  3. 非同期ミラーリング: アクティブサーバーで行われた書き込みはすべて、パッシブサーバーに非同期でミラーリング/複製されます。 これにより、アクティブサーバーがダウンしてパッシブサーバーがアクティブになる必要がある場合に備えて、パッシブサーバーが常に最新のデータと同期されるようになります。 非同期ミラーリングは、パッシブサーバーで複数の書き込みがバルク操作として実行されるため、パフォーマンスが向上することも意味します。

クライアントキャッシュ(InProc Speed)

クライアントキャッシュはWeb/アプリサーバーに対してローカルであり、アプリケーションの非常に近くにあり、分散キャッシュ(任意のキャッシュトポロジ)から読み取っているデータをキャッシュできます。 これは「キャッシュ上のキャッシュ」と見なすことができ、アプリケーションのパフォーマンスとスケーラビリティをさらに大幅に向上させます。 InProcモードでクライアントキャッシュを使用すると、InProcの速度を実現できます。

アプリケーションに対してローカルである間、クライアントキャッシュはスタンドアロンではありません。 代わりに、常にクラスター化されたキャッシュと同期されます。 これにより、クライアントキャッシュ内のデータが古くなることはありません。

クライアントキャッシュ

以下は、ミラーリングされたキャッシュの特徴の一部です。

  1. 集中的なケースを読むのに適しています: クライアントキャッシュは、読み取りの数が書き込みの数倍になる、読み取りを多用するユースケースがある場合にのみ有効です。 書き込みの数が読み取りと同じである場合、書き込みにはXNUMXつの場所での更新が含まれるため、クライアントキャッシュは実際には遅くなります。
  2. ローカルキャッシュ(InProc / OutProc)のような高速: クライアントキャッシュは、アプリケーションプロセス内(InProcモード)またはWeb /アプリサーバーのローカル(OutProcモード)に存在します。 いずれの場合も、クラスター化されたキャッシュからこのデータをフェッチする場合と比較して、アプリケーションのパフォーマンスが大幅に向上します。 InProcモードでは、オブジェクトを「アプリケーションヒープ」にキャッシュできます。これにより、分散キャッシュでは対応できない「InProc速度」が得られます。
  3. スタンドアロンキャッシュではありません: クライアントキャッシュはローカルキャッシュである可能性がありますが、スタンドアロンキャッシュではありません。 代わりに、クラスター化されたキャッシュとの同期を維持します。 つまり、別のクライアントがクライアントキャッシュにあるクラスター化キャッシュのデータを更新すると、クラスター化キャッシュはクライアントキャッシュに、そのデータの最新のコピーで更新するように通知します。 そして、これは非同期で、しかしすぐに行われます。
  4. 楽観的/悲観的同期: デフォルトでは、クライアントキャッシュはオプティミスティック同期を使用します。 NCache クライアントは、クライアントキャッシュにあるデータがすべて最新のコピーであると想定します。 クライアントキャッシュにデータがない場合、クライアントはクラスター化されたキャッシュからデータをフェッチし、クライアントキャッシュに配置して、クライアントアプリケーションに返します。 ペシミスティック同期とは、キャッシュクライアントが最初にクラスター化キャッシュをチェックして、キャッシュされたアイテムの新しいバージョンがあるかどうかを確認することを意味します。 含まれている場合、クライアントはそれをフェッチし、クライアントキャッシュに入れて、クライアントアプリケーションに返します。 それ以外の場合は、クライアントキャッシュにあるものをすべて返します。
  5. コードを変更しないプラグイン: クライアントキャッシュの最も優れている点は、アプリケーションのコードを変更しないことです。 代わりに、構成を変更するだけでプラグインできます。 と、 NCache 舞台裏のクライアントAPIは、クライアントキャッシュの使用について何をすべきかを知っています。

次はどうする?

お問い合わせ(英語)

電話
©著作権 Alachisoft 2002 - . All rights reserved. NCache はダイヤテック株式会社の登録商標です。