AWSのCDNであるCloudFrontを利用したので、
その特徴を記載しておく。
良い点
・L7レベルで動作
たとえば2つのオリジンを設定して、
パスパターンによって、振り分け先を変更できること。
静的コンテンツはS3に、動的コンテンツはELBに振るなどが可能。
・独自ドメインでのSSLが利用可能
S3では出来ない独自ドメインSSLが利用可能。
・AWS内のオリジンとは高速な通信
オリジンがELBの場合、ELB配下のインスタンスが巨大な画像等を返す場合、
通信が安定しているcloudfrontに返すほうが、インスタンスの負荷は下がる。
悪い点
・変更反映が遅い
15分くらいかかるのだろうか。
・キャッシュ削除が遅い
これも15分くらいかかっている感じがする。
・連続的にGETアクセスした場合にキャッシュさせたくなくてもキャッシュされる
例えば2つオリジンを設定して、片方を静的、もう片方を動的とする。
動的コンテンツ側に振られるURLに瞬間的に連続アクセスした場合、すべてのリクエストが動的コンテンツ側に来るわけではなく、
cloudfrontにキャッシュされてしまう。
後述するキャッシュのヒット条件にもよるが、
キャッシュさせないはずの動的コンテンツが、実際にはキャッシュからエンドユーザに返される可能性がある。
最も簡単・確実に回避するためには、URLに一意のクエリ文字列を付ければよい。(JSを使って、タイムスタンプ+ランダム文字列などを付与する)
・オリジンへ渡すヘッダー情報がキャッシュキーの種となる
オリジンへ渡すヘッダーとしては諸々設定が可能だが、
動的コンテンツをオリジンとする場合、user-agentなどを通ししまうと、
それがキャッシュキーの種となり、結果としてキャッシュヒット率が下がる。
この場合は、cloudfront独自の「IS_MOBILE」的なヘッダーを付けて、オリジン側で判定として使える。
逆に言うと、cloudfrontを使う場合、オリジンで「IS_MOBILE」などの判定処理を用意しておく必要がある。
CloudFrontは設定が細かく、結構難しい。
ただ、統計情報も充実しており、
なんといっても高負荷に強く、エッジロケーションも広いので、
上手く使えば非常に強力な製品だと感じた。
気を付けるべきは、動的コンテンツを背後に置く場合だろう。
キャッシュ条件、キャッシュ生存期間など、動的コンテンツ作成者側が意識しておくことで、
より有用なものとすることが出来ると思う。
最近は、CDNが多用されているので、
各CDNの特徴をよく確認し、十分に検証したうえで、
導入を検討するとよいと思う。
他のCDNについても、機会があれば書いてみようと思います。
以上
コメントがあればどうぞ