ソリューションアーキテクトの北迫さんによる、Cloudfrontの活用方法についてです。
普段RTBをやっているので、相手はユーザーのブラウザではなくてSSPやアドネットワークのAPIで、普段CDNを意識することはあまりありません。 バナー広告の画像やJavaScriptを置いているくらいです。 将来、動画配信とかするなら詳しくなっておきたいなと・・・
ただ現時点でも、劇的にコストや負荷を軽減する方法として、CDNとしてのCloudfrontにはまだ利用シーンがあるのではと思って考えています。
サイト高速化
DNSの仕組みを使って最適なエッジへ誘導 52 Edge locations
80:20の法則 ページ本体のレスポンスタイムは20%に過ぎず、それ以外の部分に80%の時間を使っている
ispとispの間のixのところから足が生える形でAWS edgeがある
CDN Edge Locationの活用
分散型CDNと集中型のCDN
分散型CDN: ユーザーに近いISPのところにEdgeがある キャッシュヒット率が低い傾向 集中型CDN: キャッシュ共有 Cloudfrontはこちら
CloudfrontのEdgeに可能な限りキャッシュさせることが重要
静的コンテンツ 805 キャッシュTTLも可能な限り長く、クライアント側にもキャッシュさせる
動的コンテンツ 20%
- ページ共通のもの
- パーソナライズされたもの
- 動的に生成されるが、ページ自体は一定期間共通 QueryStringを活用しているもの
- HTTPヘッダによるページ切り替えしているもの
- cache-conrtol headerとminimum ttlで調整
キャッシュしすぎるとEdgeを通すオーバーヘッドはないか? last-modified/ETag ヘッダ if-modified-since 更新なしなら304を返す
ヒット率向上のための要素
- キャッシュ時間
- URLの共通化
- Etag/Last-modifiedヘッダの活用
- Query Stringsパラメータの固定化
- 転送対象Header値の固定化
Cloudfrontは完全一致でキャッシュを共有
キャッシュヒット状況はレスポンスヘッダで
- X-Cacheの値を見る
- X-Amz-Cf-IdにIDが入る
キャッシュができない動的ページはプロキシとして利用
Dynamic Contens Acceleration
- Post/Put/Header/Cookie対応
CloudfrontのEdgeを経由させても多くの動的ページが扱えるようになった
- Keep-Alive Connection: 3 way handshakeのカット
CDN – Originの間でKeepAliveする HTTPS通信ならSSL Terminationでより効果が大きい
- TCPスロースタート
ネットワークの輻輳を回避するために少しつづパケットを増やしながら量を増やしていく仕組み
- DNS Lookupの高速化
Route53を活用するとLookupが早くなる: Cloudfrontと同じロケーションにサーバーがある –> 近い CloudfrontはAlternative Domain Name: レコードセットのTypeをCNAMEではなくAレコードのエイリアスを利用することでクエリ回数の削減が可能
Cloudfront behaviorの活用 正規表現でURL毎に異なるキャッシュポリシーを適用できる オリジンサーバーのほうで設定をする必要がない
セキュア配信
Httpsサポート
GEO Restriction
Signed URL(署名付きURL)
- Cloudfront経由で配信するコンテンツに対して期間指定URLを生成することで、配信コンテンツを保護する機能
- ポリシーを指定する
- Origin Access Identity(OAI)を使うと特定のCloudfrontからしかアクセスできないようにできる。一般のサーバーから制限する場合はIPアドレスで(CloudfrontのIPは公開されている)
- プレミアムコンテンツ配信, Streaming配信などに利用
- 有効時間の設定は、ダウンロードならサイズにかかわらず短時間でOK ストリーミングは映像・音声の再生時間+αを設定
- Behavior毎の設定、正規表現を利用してDistributionを分けなくても特定のコンテンツのみ保護可能
- Cache-controlヘッダも同様に利用できる
まとめ
- インフラアプローチでの高速化施策
- 動的コンテンツにもうまく活用できる
- セキュアなコンテンツ配信も容易かつ高速化が可能
2014/9/9 AWS Cloud Strage & DB Day http://csd.awseventsjapan.com