Continuous Ops

Exploring the world of 'Infrastructure as Code'

AWS Summit Tokyo 2014: Amazon CloudFrontを利用したサイト高速化およびセキュア配信

ソリューションアーキテクトの北迫さんによる、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