2015年1月21日水曜日

はてなブログに移行しました!

ブログ担当の阿達です。 この度はてなブログに移行しました。 新しいブログはこちら 『UZABASE Tech Blog』 引き続きUZABASE開発者ブログをよろしくお願いします。 Twitterではブログの更新情報や勉強会のお知らせをツイートしています。 @Uzabase_Tech こちらもフォローよろしくお願いします!

2015年1月14日水曜日

SPEEDAに導入して分かった、CDNの劇的な効果

インフラチームの金屋です。
ユーザベースのインフラを担当しています。

今回は身近に利用しているけど、使っていることに気付かない
インターネットの影の立役者であるCDNについて書きます。

CDNとは?

Contents      Delivery   Network
コンテンツを  配信する  ネットワーク

簡単に言うと、次の機能を持っています
  • Webコンテンツ(サイト、画像、動画等)を
  • 全世界のインターネットへ配信する
  • 専用に整備された高速ネットワーク

CDNは何のためにあるのか?

地理的・物理的に遠隔地からのアクセスをキャッシュ、経路最適化で高速化するのが目的です。

(イメージ)
[通常] 日本 <=======10秒=======> 米国
[CDN] 日本 <==CDN(2秒)==> 米国 500%高速化

なんで遠隔地だと遅くなるのか?

インターネット上のWebサイトへのアクセスの流れは
    1. www.abc.com を名前解決してグローバルIPに変換
    2. グローバルIP で接続する
    3. ルーターがパケットを中継して、宛先のグローバルIP(サーバ)まで届ける
    一般的に遠いほど、中継点(ホップ)が多く、通信に時間(コスト)が掛かり、遅延します。
    日本から近いサイト(Yahoo Japan)と遠いサイト(米Yahoo) で比べてみます。

    近いサイト(Yahoo Japan)へのping応答

    C:\>ping www.yahoo.co.jp
    www.g.yahoo.co.jp [182.22.70.251]に ping を送信しています32 バイトのデータ:
    182.22.70.251 からの応答:バイト数 =32 時間 =8ms TTL=53
    182.22.70.251 からの応答: バイト数 =32 時間 =7ms TTL=53
    182.22.70.251 からの応答: バイト数 =32 時間 =7ms TTL=53
    182.22.70.251 からの応答: バイト数 =32 時間 =7ms TTL=53
    182.22.70.251 の ping 統計:    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 
    ラウンド トリップの概算時間 (ミリ秒):  最小 = 7ms、最大 = 8ms、平均 = 7ms


    遠いサイト(米Yahoo)へのping応答

    C:\>ping www.yahoo.com
    fd-fp3.wg1.b.yahoo.com [106.10.139.246]に ping を送信しています 32 バイトのデータ:
    106.10.139.246 からの応答: バイト数 =32 時間 =72ms TTL=49
    106.10.139.246 からの応答: バイト数 =32 時間 =72ms TTL=49
    106.10.139.246 からの応答: バイト数 =32 時間 =72ms TTL=49
    106.10.139.246 からの応答: バイト数 =32 時間 =72ms TTL=49
    106.10.139.246 の ping 統計:    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 
    ラウンド トリップの概算時間 (ミリ秒):  最小 = 72ms、最大 = 72ms、平均 = 72ms


    ※ラウンドトリップ:通信の往復にかかる時間
    遠いサイトの方が約10倍時間が掛かっています。

    実際の経路を比べてみましょう。

    近いサイト(Yahoo Japan)の経路→11回経由
     C:\>tracert www.yahoo.co.jp
      www.g.yahoo.co.jp [182.22.39.242] へのルートをトレースしています経由するホップ数は最大 30 です:
    1     1 ms     2 ms     1 ms  10.10.5.126
     2     1 ms     1 ms     1 ms  10.0.0.254
     3     3 ms     3 ms     3 ms  106.162.241.131
    4     3 ms     3 ms     3 ms  106.162.241.161
    5     4 ms     3 ms     4 ms  sjkBBAR001-2.bb.kddi.ne.jp [106.162.241.141]
    6     7 ms     7 ms     6 ms  sjkBBAC06.bb.kddi.ne.jp [182.248.174.1]
    7    11 ms     3 ms     4 ms  otejbb206.int-gw.kddi.ne.jp [210.234.225.5]
    8     4 ms     4 ms     4 ms  cm-ote257.int-gw.kddi.ne.jp [118.155.197.52]
    9     5 ms     4 ms     4 ms  125.29.25.94
    10     7 ms     7 ms     7 ms  118.151.224.242
    11     7 ms     7 ms    13 ms  182.22.34.86
    12    10 ms    10 ms     8 ms  f4.top.vip.ssk.yahoo.co.jp [182.22.39.242]

    ※全て日本国内                
     遠いサイト(米Yahoo)の経路→19回経由
    C:\>tracert www.yahoo.com
    fd-fp3.wg1.b.yahoo.com [106.10.139.246] へのルートをトレースしています経由するホップ数は最大 30 です:
    1     1 ms    <1 ms     1 ms  10.10.5.126 2     1 ms     1 ms     1 ms  10.0.0.254
    3     3 ms     4 ms     3 ms  106.162.241.131
    4     3 ms     3 ms     4 ms  106.162.241.161
    5     4 ms     3 ms     4 ms  sjkBBAR001-2.bb.kddi.ne.jp [106.162.241.141]
    6     8 ms     4 ms     8 ms  sjkBBAC06.bb.kddi.ne.jp [182.248.174.1]
    7     6 ms     4 ms     3 ms  otejbb206.int-gw.kddi.ne.jp [210.234.225.85]
    8    10 ms    17 ms    17 ms  ix-ote212.int-gw.kddi.ne.jp [106.187.6.134]
    9    15 ms    17 ms     4 ms  Vlan527.ihar1.OVC-Tokyo.as6453.net [116.0.90.65]
    10     4 ms    19 ms    13 ms  Port-channel2.ihar2.OVC-Tokyo.as6453.net [116.0.91.1]
    11     5 ms     4 ms     4 ms  if-3-1-0-11.tcore1.TV2-Tokyo.as6453.net [180.87.180.21]

    ※1~12:日本国内でラウンドトリップが少ない

    12     *        *        *     要求がタイムアウトしました。
    13    70 ms    75 ms    70 ms  if-6-2.tcore1.SVW-Singapore.as6453.net [180.87.12.109]
    14    70 ms    71 ms    70 ms  if-2-2.tcore2.SVW-Singapore.as6453.net [180.87.12.2]
    15    77 ms    81 ms    82 ms  180.87.15.122
    16    71 ms    91 ms    71 ms  ae-5.msr1.sg3.yahoo.com [203.84.209.87]
    17    78 ms    78 ms    77 ms  ae-2.clr2-a-gdc.sg3.yahoo.com [106.10.128.5]
    18    71 ms    71 ms    71 ms  et-18-25.fab3-1-gdc.sg3.yahoo.com [106.10.128.25] 19    88 ms    88 ms    88 ms  po-11.bas1-1-prd.sg3.yahoo.com [106.10.128.69]
    20    73 ms    72 ms    72 ms  ir1.fp.vip.sg3.yahoo.com [106.10.139.246]

    ※13~20:日本国外でラウンドトリップが多い         
    (地理的・物理的に遠く、相手先のネットワーク環境に依存)
    →この遅延をキャッシュと経路最適化で高速化し、解消する


    通常経路とCDNの概念図


    • 通常経路だと、遅延が大きくなる(経由が多く、各国の通信環境に依存)
    • CDNだと、エッジサーバのキャッシュと最適経路で安定した高速ネットワークで遅延が小さい

    CDN経由でのアクセス概念図

    • 日本国内のPCから、米国に存在するホスト「abc.com」へアクセスすることを想定
    • エッジサーバが応答することで、高速化+ホスト負荷軽減のメリットもある

    改めてCDNとは?

    Contents      Delivery   Network
    コンテンツを  配信する  ネットワーク

    これまでの内容を合わせると、次のように言うことができます。
    • Webコンテンツ(サイト、画像、動画等)
    • 世界中に分散配置されたエッジサーバのキャッシュを利用して
    • 専用に経路最適化された高速なネットワーク網を通じて
    • 全世界のインターネットへの配信を高速化する仕組み

    SPEEDAでの効果

    当社サービスのSPEEDAで検証した結果が下記の通りです。


    • どの地域でも200%以上高速化されている(日本国内も含めて)
    • 特に中国(右端)が顕著
      • 中国特有の環境が影響
        • 金盾(グレートファイアウォール)という中国国内の情報検閲システムや、 南北問題(中国国内でもアクセスが遅い)などでネットワーク遅延が大きい


    CDN導入後の一般的な変更点・注意点

    • アクセス元IPアドレスがエッジサーバのIPになる
      • 本来のリモートホストはHTTPヘッダで付与
        • 「X-forwarded-for」や「Origin-IP」など
      • Webサーバでのアクセス制限やプログラム側での処理に注意
    • 静的ファイルがキャッシュされる
      • ファイル名に日付を付けるなど、ユニーク化しないとキャッシュ有効期限まで反映されない等の問題が発生する可能性がある

    まとめ

    以上、一般的なCDNの効果と仕組みを説明しました。
    もちろんメリットだけでなく費用やアプリケーション改修も発生するので、
    しっかりと検証して、費用対効果を見極めることが重要です。