クラウド ネイティブ アプリでのキャッシュ

ヒント

このコンテンツは eBook の「Azure 向けクラウド ネイティブ .NET アプリケーションの設計」からの抜粋です。.NET Docs で閲覧できるほか、PDF として無料ダウンロードすると、オンラインで閲覧できます。

Cloud Native .NET apps for Azure eBook cover thumbnail.

キャッシュの利点はよく理解されています。 この手法の機能は、頻繁にアクセスされるデータをバックエンド データ ストアから、アプリケーションの近くにある "高速ストレージ" に一時的にコピーすることです。 キャッシュが実装されるのは、主に次のような場合です。

  • データが比較的静的なままである。
  • データ アクセスが遅い (特に、キャッシュの速度と比較して)。
  • データが高レベルの競合の影響を受ける。

なぜですか?

Microsoft キャッシュ ガイダンスに関する記事で説明されているように、キャッシュを使用すると、個々のマイクロサービスとシステム全体のパフォーマンス、スケーラビリティ、可用性を向上させることができます。 これにより、データ ストアに対する大量の同時要求の処理における待機時間と競合が軽減されます。 データ量とユーザー数が増えるにつれて、キャッシュの利点が大きくなります。

キャッシュは、変更不可のデータまたは変更頻度の低いデータをクライアントが繰り返し読み取る場合に最も効果的です。 たとえば、製品や価格の情報などの参考情報や、構築するのに費用がかかる共有静的リソースなどです。

マイクロサービスはステートレスである必要がありますが、分散キャッシュは、必要に応じてセッション状態データへの同時アクセスをサポートできます。

また、繰り返し計算が行われないようにする場合も、キャッシュを検討します。 操作でデータを変換したり、複雑な計算を実行したりする場合は、後続の要求のために結果をキャッシュします。

キャッシュ アーキテクチャ

クラウドネイティブ アプリケーションでは、通常、分散キャッシュ アーキテクチャを実装します。 キャッシュは、マイクロサービスとは別に、クラウドベースのバッキング サービスとしてホストされます。 図 5-15 は、そのアーキテクチャを示したものです。

Caching in a cloud native app

図 5-15: クラウドネイティブ アプリでのキャッシュ

前の図で、キャッシュがマイクロサービスに依存せず、マイクロサービスによって共有されていることに注意してください。 このシナリオでは、キャッシュは API ゲートウェイによって呼び出されます。 第 4 章で説明したように、ゲートウェイはすべての受信要求のフロントエンドとして機能します。 分散キャッシュにより、可能な限りキャッシュされたデータを返すことによって、システムの応答性が高くなります。 さらに、サービスからキャッシュを分離することで、トラフィック需要の増加に合わせて、キャッシュを個別にスケールアップまたはスケールアウトすることができます。

前の図は、キャッシュアサイド パターンと呼ばれる一般的なキャッシュ パターンを示しています。 受信要求の場合、まずキャッシュで応答のクエリを実行します (ステップ #1)。 見つかった場合は、すぐにデータが返されます。 データがキャッシュに存在しない場合 (キャッシュ ミスとも呼ばれます)、ダウンストリーム サービスのローカル データベースから取得されます (ステップ #2)。 その後、将来の要求のためにキャッシュに書き込まれ (ステップ #3)、呼び出し元に返されます。 システムがタイムリーで一貫した状態になるように、キャッシュされたデータを定期的に削除するよう、注意する必要があります。

共有キャッシュが大きくなるにつれて、データを複数のノードにパーティション分割する方が有益な場合があります。 これにより、競合を最小限に抑えてスケーラビリティを向上させることができます。 多くのキャッシュ サービスでは、ノードを動的に追加および削除したり、パーティション間でデータを再調整したりする機能がサポートされています。 このアプローチには、通常、クラスタリングが含まれます。 クラスタリングにより、シームレスな単一のキャッシュとして、フェデレーション ノードのコレクションが公開されます。 ただし、内部的には、負荷を均等に分散する定義済みの分散戦略に従って、ノード間にデータが分散されます。

Azure Cache for Redis

Azure Cache for Redis は、セキュリティで保護されたデータ キャッシュとメッセージング ブローカー サービスであり、Microsoft によって完全に管理されています。 サービスとしてのプラットフォーム (PaaS) として使用され、データへの高スループットと待機時間の短いアクセスが提供されます。 Azure の内部または外部のすべてのアプリケーションからアクセスできるサービスです。

Azure Cache for Redis サービスにより、Azure データ センターをまたいでホストされているオープンソースの Redis サーバーへのアクセスが管理されます。 このサービスは、管理、アクセス制御、セキュリティを提供するファサードとして機能します。 文字列、ハッシュ、リスト、セットなどの豊富なデータ構造のセットが、サービスによってネイティブにサポートされています。 アプリケーションで既に Redis を使用している場合、Azure Cache for Redis でも同様に動作します。

Azure Cache for Redis は単なるキャッシュ サーバーではありません。 マイクロサービス アーキテクチャを拡張するさまざまなシナリオをサポートできます。

  • メモリ内データ ストア
  • 分散型非リレーショナル データベース
  • メッセージ ブローカー
  • 構成サーバーまたは検出サーバー

高度なシナリオでは、キャッシュされたデータのコピーをディスクに保存することができます。 致命的なイベントによりプライマリとレプリカ両方のキャッシュが無効になった場合、キャッシュは最新のスナップショットから再構築されます。

Azure Redis Cache は、いくつかの定義済みの構成と価格レベルで利用できます。 Premium レベルでは、クラスタリング、データの永続性、geo レプリケーション、仮想ネットワークの分離など、多くのエンタープライズ レベル機能が提供されます。