CloudFrontのキャッシュヒット率を向上させる方法

AWS

CloudFrontを利用する際、キャッシュヒット率を向上することで以下のような効果を得られます。

  • レスポンスの高速化
  • オリジンサーバーの負荷軽減

本記事では、CloudFrontのキャッシュヒット率を向上させるための具体的な方法について解説します。


キャッシュキーの最適化

CloudFrontはデフォルトで以下を考慮せずにキャッシュを行います。

  • HTTPヘッダー
  • Cookie
  • クエリ文字列

カスタム設定によっては、異なるキャッシュエントリが作成される可能性があります。
1コンテンツに対しキャッシュエントリが異なれば、キャッシュヒット率が低下します。

デフォルトのキャッシュポリシーは以下の通りである。

不要なクエリ文字列を除外する

必要なクエリ文字列のみをキャッシュキーに含める。
特定のトラッキングパラメータ(例:utm_sourcefbclid)はキャッシュキーから除外する。

クエリ文字列の順序を統一する

CloudFrontのキャッシュは、クエリ文字列の順序の違いを区別します。
URLを正規化することで、キャッシュヒット率を向上させることができます。

Q
順序が違うだけで異なるキャッシュエントリが作成されるのか
A

される。「?hoge=1&fuga=2」でキャッシュヒットしている。

クエリ文字列を逆にした「?fuga=2&hoge=1」でキャッシュヒットしない。

Cookieの最適化

Cookieによってキャッシュを分ける必要がない場合があります。
その場合は、Cookieをキャッシュキーから除外する。

HTTPヘッダーの最適化

キャッシュキーに含めるHTTPヘッダーを明示的に設定する。
例えば、HostUser-Agent など。

HTTPヘッダーの要件は、使用するHTTPのバージョンによって異なります。
例えば、Host ヘッダーでは以下のような違いがあります。

  • HTTP/1.1では、必須
  • HTTP/2では、接続時に対象が確立されるため必須ではない

HTTPヘッダーをキャッシュキーに含める場合、クライアントが利用するHTTPのバージョン把握が重要です。

キャッシュ時間(TTL)の適正化

TTL(Time To Live)が短すぎるとキャッシュが頻繁に無効化されます。
その結果、オリジンへのリクエストが増加します。

適切なTTL設定

静的コンテンツ(画像・CSS・JSなど)はTTLを長めに設定できると思います。
動的コンテンツでも要件次第ではTTLを長めに設定することができます。

例えば、記事情報を提供するAPIで考えてみます。
記事の反映に1時間かかることを前提とすれば、TTLを最大1時間に設定できます。

圧縮アルゴリズムの最適化

CloudFrontは、様々な圧縮アルゴリズムをサポートしています。
例えば、GzipやBrotliがあります。

設定によってはキャッシュヒット率が低下することがあります。
これは、同じコンテンツであっても、CloudFrontが圧縮形式ごとに異なるキャッシュエントリを作成するためです。

あるユーザーがGzip圧縮されたコンテンツを要求します。
次のユーザーが非圧縮コンテンツを要求します。
それぞれ別のキャッシュエントリが作成され、キャッシュヒット率が低下します。

クライアントの圧縮アルゴリズムを統一する

ブラウザをクライアントとする場合、以下の情報を基に統一可能か判断できます。

  • ユーザが使用しているブラウザ
  • それぞれで要求される圧縮アルゴリズム

一方、システムをクライアントとする場合は、以下の情報を基に判断できます。

  • HTTPヘッダーの付与が可能か
  • 解凍可能な圧縮アルゴリズム

統一できない、または現時点で統一したくない場合もあるでしょう。
その場合は、CloudFrontの設定で圧縮を無効化するのも一つの方法です。

CloudFrontはデータ転送量(OUT)に対して料金がかかります。
圧縮しない場合、転送量が増加し、ランニングコストが増加する可能性があります。
CloudFrontの料金コンポーネント:https://aws.amazon.com/jp/cloudfront/pricing/?nc=sn&loc=3


まとめ

CloudFrontのキャッシュヒット率を向上させるには、以下の工夫が必要です。

  • キャッシュキーの最適化
  • TTLの適正化
  • 圧縮アルゴリズムの最適化

特に、以下を考慮することでオリジン負荷を大幅に削減できます。

  • クエリ文字列によるキャッシュ分散
  • 圧縮形式によるキャッシュ分散

さらに、以下を組み合わせることで、効率的な運用が可能になります。

  • キャッシュのバージョニング
  • キャッシュの分析

これらの対策を実施し、CloudFrontをより効果的に活用しましょう!

コメント

タイトルとURLをコピーしました