本文へスキップ
BecomeCoder

AWS SAA(ソリューションアーキテクト)コース · 第9章 高性能・スケーラビリティの設計 · レッスン51

キャッシュ戦略

導入

同じデータを毎回オリジンサーバーやデータベースまで取りに行くのは無駄です。一度取得した結果を手元に置いておき、次回はそこから即座に返す——これが キャッシュ です。SAAでは「どの層でキャッシュするか」を使い分ける力が問われます。

説明

AWSのアーキテクチャでは、リクエストの通り道の複数箇所にキャッシュを置くことができます。これを 多層キャッシュ と呼びます。

flowchart LR
    U["利用者"] --> CF["CloudFront<br/>(エッジキャッシュ)"]
    CF --> ALB["ロードバランサー"]
    ALB --> EC["ElastiCache<br/>(DB前段のキャッシュ)"]
    EC --> DB["RDS/Aurora"]
    ALB --> DAX["DAX<br/>(DynamoDB前段のキャッシュ)"]
    DAX --> DDB["DynamoDB"]
レイヤサービスキャッシュする内容効果
エッジ(世界中の配信拠点)CloudFront画像・動画・静的コンテンツ、APIレスポンスも可利用者に地理的に近い場所から配信、オリジンの負荷とレイテンシーを削減
アプリ〜DB間ElastiCache(Redis / Memcached)クエリ結果、セッション情報データベースへのアクセス回数を減らし、応答を高速化
DynamoDB専用DAX(DynamoDB Accelerator)DynamoDBへの読み取り結果マイクロ秒単位の応答、DynamoDB自体への読み取り負荷を削減

キャッシュの効果は キャッシュヒット率(要求されたデータがキャッシュに存在した割合)で測ります。ヒット率が高いほど、オリジンやデータベースへの負荷とレイテンシーが下がります。ただし、キャッシュしたデータは元データと食い違う(古くなる)リスクもあるため、更新頻度の高いデータには 有効期限(TTL) や無効化の仕組みを組み合わせます。

読んでみよう

「静的コンテンツの配信を高速化したい/世界中のユーザーに配りたい」→CloudFront、「データベースへの読み取り負荷を減らしたい」→ElastiCache、「DynamoDBの読み取りをマイクロ秒レベルで高速化したい」→DAX、と役割ごとに即座に結びつけられるようにしておきましょう。