キャッシュと Redis
アプリがユーザーの要求に迅速に応答することは重要です。 Web サイトが遅いと、訪問者はすぐに不満を感じてあなたのサイトを離れ、もしかすると競争相手のサイトにアクセスするかもしれません。 複雑なデータ セットが要求された場合でも、高速に応答するアプリを作成するにはどうすればよいでしょうか? アプリを高速化する 1 つの方法は、キャッシュを使用することです。
あなたはアウトドア用機器の販売店で働いているとします。 あなたの新しい Web アプリは開発中で、いくつかのマイクロサービスは最初のリリースに近づいていますが、一部のページの読み込みが遅すぎます。 あなたはそれらのパフォーマンスを向上させる方法を見つける必要があります。
このユニットでは、キャッシュが Web アプリの速度の向上にどのように役立つかを学習します。
Redis とは
Redis は、オープン ソースのメモリ内情報ストアです。 この名前は、Remote Dictionary Server の略です。 Redis の最も重要な特徴はおそらく、読み書き両方の操作の待機時間が短いことです。これは、その設計と、すべての情報をメモリ内に保持しているという事実によって実現されています。 Redis にはデータベースとメッセージ ブローカーの機能が含まれていますが、一般的にはキャッシュ システムとして認識されています。
キャッシュがパフォーマンスを向上させる方法
キャッシュを使用すると、ユーザーへの応答を構築するのに時間がかかる多くのシステムのパフォーマンスを向上させることができます。 たとえば、マイクロサービスから構築された eコマース Web サイトを考えてみましょう。 ユーザーが自分のショッピング カートにどのアイテムが入っているかを知りたい場合、システムは以下の操作を実行するでしょう。
- Web アプリ マイクロサービスで要求を受信する。
- ユーザーがログイン済みである場合、認証マイクロサービスを呼び出してユーザーの ID を確認する。
- ショッピング カート マイクロサービスを呼び出して、カート内のアイテムが何であり数量がいくつであるかを確認する。
- 製品カタログ マイクロサービスを呼び出して、各製品の完全な詳細を取得する。
- 画像マイクロサービスを呼び出して、各製品の画像 BLOB を取得する。
- 在庫取得マイクロサービスを呼び出して、在庫レベルを確認する。
- 配送マイクロサービスを呼び出して、ユーザーの場所と設定に対する配送コストを計算する。
正確な手順は実際の設計とビジネス機能によって異なるかもしれませんが、プロセスが複雑で、多数の個別のマイクロサービスとバッキング サービスが関係することがわかります。 パフォーマンスを確保するためには各マイクロサービスを構成してリソースを割り当てる必要はありますが、応答の構築には必然的に一定の時間がかかります。
次に、ユーザーがページを更新するとします。 ページまたはページの一部がキャッシュに保存されている場合は、HTML 応答全体をゼロから再構築する代わりに、元の要求よりもはるかに高速にそれをユーザーに返すことができます。 この迅速な応答は、Web アプリの応答性を高め、ユーザーにとって快適なものにするのに役立ちます。
キャッシュに関する考慮事項
キャッシュを使用する際の重要な設計上の判断は、特定のコンテンツをどの程度の期間キャッシュしておくべきかということです。 たとえば、ショッピング カートにおいて、完成したカート ページを 1 時間キャッシュした場合、その間に他の注文が行われる可能性があり、キャッシュされたページは最新ではない在庫レベルを示すことがあるので、ユーザーは予想よりも長く配送を待つ必要があるかもしれません。 ページを 1 分間しかキャッシュしない場合、在庫レベルが正確になることには自信を持てますが、パフォーマンスの向上はわずかであるか、まったくないかもしれません。 そのため、どの程度の期間情報をキャッシュするかを選択する際には、以下の点を考慮してください。
- 情報はどのくらいの頻度で変更されるのか? たとえば、在庫レベルは 1 時間に複数回変更される可能性がありますが、新しい製品がカタログ内に現れるのは数か月に一回だけです。
- ユーザーが最新の情報を確認することがどの程度重要なのか? たとえば、在庫レベルは重要であるかもしれませんが、新しい製品レビューの時刻はあまり重要ではないと判断するかもしれません。
- その情報に対する要求を受け取る頻度はどの程度になると考えられるか? 需要のある情報をキャッシュすると、システムはキャッシュからそれを複数回提供できるので、パフォーマンスが向上します。
.NET Aspire プロジェクトでの Redis の使用
Redis は、クラウドネイティブ アプリケーションでのキャッシュの人気のある選択肢です。 .NET Aspire には、Redis サービスとのやり取りに使用できる以下の 3 つのコンポーネントが用意されています。
- .NET Aspire StackExchange Redis コンポーネント:このコンポーネントは、Redis サーバーと直接やり取りするために使用します。 たとえば、これを使用して Redis データベースに値を保存して取得したり、チャネルに送信されたメッセージをサブスクライブしたりできます。 このコンポーネントはキャッシュに重点を置いたものではないため、このモジュールではこれについてこれ以上は検討しません。
- .NET Aspire StackExchange Redis 出力キャッシュ コンポーネント:このコンポーネントは、完全な HTTP 応答をキャッシュするために使用します。
- .NET Aspire StackExchange Redis 分散キャッシュ コンポーネント:このキャッシュ コンポーネントは、分散キャッシュのデータの保存および取得に使用します。 分散キャッシュとは、複数のマイクロサービスまたは他のクライアント サービスが 1 つのキャッシュを共有するアーキテクチャを表します。