ヒント
このコンテンツは、Azure 用のクラウド ネイティブ .NET アプリケーションの設計に関する電子ブックからの抜粋であり、.NET Docs またはオフラインで読み取ることができる無料のダウンロード可能な PDF として入手できます。
キャッシュの利点は十分に理解されています。 この手法は、頻繁にアクセスされるデータをバックエンド データ ストアから、アプリケーションの近くにある 高速ストレージ に一時的にコピーすることによって機能します。 キャッシュは、多くの場合、ここで実装されます。...
- データは比較的静的なままです。
- データ アクセスは、特にキャッシュの速度と比較して低速です。
- データは、高レベルの競合の影響を受けます。
なぜでしょうか。
Microsoft のキャッシュ ガイダンスで説明したように、キャッシュを使用すると、個々のマイクロサービスとシステム全体のパフォーマンス、スケーラビリティ、可用性を向上させることができます。 これにより、データ ストアに対する大量の同時要求の処理の待機時間と競合が軽減されます。 データ量とユーザー数が増えるにつれて、キャッシュの利点が大きくなります。
キャッシュは、変更できないデータや変更頻度の低いデータをクライアントが繰り返し読み取る場合に最も効果的です。 たとえば、製品や価格情報などの参照情報や、構築にコストがかかる共有静的リソースなどがあります。
マイクロサービスはステートレスである必要がある一方で、分散キャッシュは、絶対に必要な場合にセッション状態データへの同時アクセスをサポートできます。
また、繰り返し計算を回避するためにキャッシュも検討してください。 操作がデータを変換したり、複雑な計算を実行したりする場合は、後続の要求の結果をキャッシュします。
キャッシュ アーキテクチャ
クラウド ネイティブ アプリケーションは、通常、分散キャッシュ アーキテクチャを実装します。 キャッシュは、マイクロサービスとは別のクラウドベースの バッキング サービスとしてホストされます。 図 5-15 にアーキテクチャを示します。
図 5-15: クラウド ネイティブ アプリでのキャッシュ
前の図では、キャッシュがマイクロサービスから独立して共有される方法に注意してください。 このシナリオでは、 キャッシュは API ゲートウェイによって呼び出されます。 第 4 章で説明したように、ゲートウェイはすべての受信要求のフロントエンドとして機能します。 分散キャッシュは、可能な限りキャッシュされたデータを返すことによって、システムの応答性を向上させます。 さらに、キャッシュをサービスから分離することで、キャッシュを個別にスケールアップまたはスケールアウトして、増加するトラフィック需要に対応できます。
前の図は、 キャッシュ アサイド パターンと呼ばれる一般的なキャッシュ パターンを示しています。 受信要求の場合は、最初にキャッシュ (手順 1) に対して応答のクエリを実行します。 見つかった場合、データはすぐに返されます。 キャッシュにデータが存在しない場合 ( キャッシュ ミスと呼ばれます)、ダウンストリーム サービスのローカル データベースから取得されます (手順 2)。 その後、将来の要求 (手順 3) のためにキャッシュに書き込まれ、呼び出し元に返されます。 システムがタイムリーかつ一貫性を保つよう、キャッシュされたデータを定期的に削除するように注意する必要があります。
共有キャッシュが増えるにつれて、複数のノード間でデータをパーティション分割することが有益である可能性があります。 これにより、競合を最小限に抑え、スケーラビリティを向上させることができます。 多くのキャッシュ サービスでは、ノードを動的に追加および削除し、パーティション間でデータを再調整する機能がサポートされています。 通常、このアプローチにはクラスタリングが含まれます。 クラスタリングは、フェデレーション ノードのコレクションをシームレスな単一キャッシュとして公開します。 ただし、内部的には、負荷を均等に分散する定義済みの分散戦略に従って、ノード間でデータが分散されます。
Azure Cache for Redis (アジュール・キャッシュ・フォー・レディス)
Azure Cache for Redis は、Microsoft が完全に管理するセキュリティで保護されたデータ キャッシュおよびメッセージング ブローカー サービスです。 サービスとしてのプラットフォーム (PaaS) オファリングとして使用され、高いスループットとデータへの低待機時間のアクセスを提供します。 このサービスは、Azure 内または Azure 外の任意のアプリケーションからアクセスできます。
Azure Cache for Redis サービスは、Azure データ センター全体でホストされているオープン ソースの Redis サーバーへのアクセスを管理します。 サービスは、管理、アクセス制御、およびセキュリティを提供するファサードとして機能します。 このサービスは、文字列、ハッシュ、リスト、セットなど、豊富なデータ構造のセットをネイティブにサポートします。 アプリケーションで既に Redis を使用している場合は、Azure Cache for Redis で as-is 動作します。
Azure Cache for Redis は単純なキャッシュ サーバー以上の機能です。 マイクロサービス アーキテクチャを強化するためのさまざまなシナリオをサポートできます。
- メモリ内データ ストア
- 分散非リレーショナル データベース
- メッセージ ブローカー
- 構成サーバーまたは探索サーバー
高度なシナリオでは、キャッシュされたデータのコピーを ディスクに保持できます。 致命的なイベントによってプライマリ キャッシュとレプリカ キャッシュの両方が無効になった場合、キャッシュは最新のスナップショットから再構築されます。
Azure Redis Cache は、さまざまな定義済みの構成と価格レベルで使用できます。 Premium レベルには、クラスタリング、データ永続化、geo レプリケーション、仮想ネットワーク分離など、多くのエンタープライズ レベルの機能があります。
.NET