CloudFrontを利用する際、キャッシュヒット率を向上することで以下のような効果を得られます。
- レスポンスの高速化
- オリジンサーバーの負荷軽減
本記事では、CloudFrontのキャッシュヒット率を向上させるための具体的な方法について解説します。
キャッシュキーの最適化
CloudFrontはデフォルトで以下を考慮せずにキャッシュを行います。
- HTTPヘッダー
- Cookie
- クエリ文字列
カスタム設定によっては、異なるキャッシュエントリが作成される可能性があります。
1コンテンツに対しキャッシュエントリが異なれば、キャッシュヒット率が低下します。
不要なクエリ文字列を除外する
必要なクエリ文字列のみをキャッシュキーに含める。
特定のトラッキングパラメータ(例:utm_source
や fbclid
)はキャッシュキーから除外する。
クエリ文字列の順序を統一する
CloudFrontのキャッシュは、クエリ文字列の順序の違いを区別します。
URLを正規化することで、キャッシュヒット率を向上させることができます。
Cookieの最適化
Cookieによってキャッシュを分ける必要がない場合があります。
その場合は、Cookieをキャッシュキーから除外する。
HTTPヘッダーの最適化
キャッシュキーに含めるHTTPヘッダーを明示的に設定する。
例えば、Host
や User-Agent
など。
キャッシュ時間(TTL)の適正化
TTL(Time To Live)が短すぎるとキャッシュが頻繁に無効化されます。
その結果、オリジンへのリクエストが増加します。
適切なTTL設定
静的コンテンツ(画像・CSS・JSなど)はTTLを長めに設定できると思います。
動的コンテンツでも要件次第ではTTLを長めに設定することができます。
例えば、記事情報を提供するAPIで考えてみます。
記事の反映に1時間かかることを前提とすれば、TTLを最大1時間に設定できます。
圧縮アルゴリズムの最適化
CloudFrontは、様々な圧縮アルゴリズムをサポートしています。
例えば、GzipやBrotliがあります。
設定によってはキャッシュヒット率が低下することがあります。
これは、同じコンテンツであっても、CloudFrontが圧縮形式ごとに異なるキャッシュエントリを作成するためです。
クライアントの圧縮アルゴリズムを統一する
ブラウザをクライアントとする場合、以下の情報を基に統一可能か判断できます。
- ユーザが使用しているブラウザ
- それぞれで要求される圧縮アルゴリズム
一方、システムをクライアントとする場合は、以下の情報を基に判断できます。
- HTTPヘッダーの付与が可能か
- 解凍可能な圧縮アルゴリズム
統一できない、または現時点で統一したくない場合もあるでしょう。
その場合は、CloudFrontの設定で圧縮を無効化するのも一つの方法です。

まとめ
CloudFrontのキャッシュヒット率を向上させるには、以下の工夫が必要です。
- キャッシュキーの最適化
- TTLの適正化
- 圧縮アルゴリズムの最適化
特に、以下を考慮することでオリジン負荷を大幅に削減できます。
- クエリ文字列によるキャッシュ分散
- 圧縮形式によるキャッシュ分散
さらに、以下を組み合わせることで、効率的な運用が可能になります。
- キャッシュのバージョニング
- キャッシュの分析
これらの対策を実施し、CloudFrontをより効果的に活用しましょう!
コメント