読者です 読者をやめる 読者になる 読者になる

UZABASE Tech Blog

株式会社ユーザベースの技術チームブログです。 主に週次の持ち回りLTやセミナー・イベント情報について書きます。

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.jpwww.g.yahoo.co.jp [182.22.70.251]に ping を送信しています32 バイトのデータ:182.22.70.251 からの応答:バイト数 =32 時間 =8ms TTL=53182.22.70.251 からの応答: バイト数 =32 時間 =7ms TTL=53182.22.70.251 からの応答: バイト数 =32 時間 =7ms TTL=53182.22.70.251 からの応答: バイト数 =32 時間 =7ms TTL=53182.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=49106.10.139.246 からの応答: バイト数 =32 時間 =72ms TTL=49106.10.139.246 からの応答: バイト数 =32 時間 =72ms TTL=49106.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の概念図

f:id:uzabase:20150114195558p:plain

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

 

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

f:id:uzabase:20150114195710p:plain

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

改めてCDNとは?

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

SPEEDAでの効果

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

f:id:uzabase:20150114195814p:plain

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

 

 

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

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

 

まとめ

以上、一般的なCDNの効果と仕組みを説明しました。

もちろんメリットだけでなく費用やアプリケーション改修も発生するので、

しっかりと検証して、費用対効果を見極めることが重要です。