世界中のユーザにコンテンツ配信する場合、やはり Azure CDN は有用なのか?

こんにちは。日山(@hiiyan0402)です。
今回、Azure CDN の効果を実感するべく、各DCに配置した仮想マシンから、東日本DCのWebサイト、Blobストレージ、Azure CDN からのデータダウンロード時間を計測しました。


Azure CDN の効果を確認する

Azure CDN の効果を実感するべく、以下の実験を行いました。

  • データのダウンロード元として、各データセンター(12箇所)に仮想マシンを作成
  • 仮想マシンはOS”Windows Server 2012 R2 Datacenter”の 基本 A1 (1core, 1.75GB)インスタンス
  • データセンターは 東日本, 西日本, 東アジア, 東南アジア, 米国東部, 米国中央部, 米国中北部, 米国中南部, 米国西部, 西ヨーロッパ, 北ヨーロッパ, ブラジル が対象
  • データの配信元として Webサイト, Azureストレージ(Blob, Publicコンテナ), Azure CDN (左記Blobにマッピング)を東日本データセンターに用意
  • Webサイトは 標準 Sインスタンス 1台
  • Azureストレージのレプリケーションはローカル冗長
  • 各データ配信元に 1MB, 10MB, 100MBのデータを配置
  • 各ダウンロード元から各データ配信元の各データをそれぞれ10回ずつダウンロードし、ダウンロード時間を計測
  • 12箇所 × 3箇所 × 10データ × 10回 = 3600回のデータを計測することになる
  • 10回の計測結果のうち、上位2位と下位2位を除いた、6回分の平均値を計測結果とする

計測結果

単位(ミリ秒) Webサイト Blob CDN
1MB 10MB 100MB 1MB 10MB 100MB 1MB 10MB 100MB
東日本 391 298 2,229 334 133 1,233 334 242 1,381
西日本 365 562 4,079 211 282 3,138 3,716 7,898 48,314
東アジア 296 756 5,927 161 470 4,260 144 227 1,576
東南アジア 342 1,176 10,788 172 393 3,482 3,492 7,414 50,449
米国東部 442 1,816 16,921 277 804 7,612 148 202 1,044
米国中央部 300 1,613 14,794 274 1,702 16,242 382 690 4,747
米国中南部 343 1,441 13,746 273 1,602 13,774 258 415 2,898
米国中北部 363 1,786 16,823 280 1,152 10,274 197 230 1,327
米国西部 362 1,314 11,258 208 460 3,978 2,429 4,399 31,410
西ヨーロッパ 2,032 2,982 25,036 6,708 42,053 345,102 189 1,050 3,785
北ヨーロッパ 3,803 3,323 25,506 8,388 59,116 656,050 322 504 3,380
ブラジル南部 500 2,871 27,190 377 1,451 14,272 2,107 4,554 31,223
← 遅い 速い →
東日本 Webサイト CDN Blob
西日本 CDN Webサイト Blob
東アジア Webサイト Blob CDN
東南アジア CDN Webサイト Blob
米国東部 Webサイト Blob CDN
米国中央部 Blob Webサイト CDN
米国中南部 Blob Webサイト CDN
米国中北部 Webサイト Blob CDN
米国西部 CDN Webサイト Blob
西ヨーロッパ Blob Webサイト CDN
北ヨーロッパ Blob Webサイト CDN
ブラジル南部 CDN Webサイト Blob

まとめ

  • さすがはCDN 米国→日本 や ヨーロッパ→日本 でもダウンロードが速い!倍以上の速度。
  • ただ、一部データセンターだとCDN経由のダウンロードが異常に遅い。西日本、東南アジア、米国西部、ブラジル南部とか。
  • ヨーロッパ→日本 のBlobアクセスが異常に遅い。
  • 総括すると、世界中のユーザにコンテンツ配信する場合は、だいたい早くなります。使いましょう。

おまけ:計測プログラム

こんなソースで計測しました。

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Net;

namespace CheckDownloadSpeed
{
    class Program
    {
        static void Main()
        {
            const int checkCount = 3;
            var baseUrls = new[]
            {
                "http://hiiyan0402.blob.core.windows.net",
                "http://az658219.vo.msecnd.net",
                "http://hiiyan-test.azurewebsites.net"
            };
            var filePaths = new[]
            {
                "/public/1mb.txt",
                "/public/10mb.txt",
                "/public/100mb.txt"
            };

            var results = new List();
            for (int i = 0; i < checkCount; i++)
            foreach (var baseUrl in baseUrls)
            foreach(var filePath in filePaths)
            {
                var url = baseUrl + filePath;
                Console.WriteLine("{0} : {1}", i, url);
                var result = CheckDownloadSpeed(url);
                results.Add(url + " : " + result);
            }

            File.WriteAllLines("result.txt", results);
        }

        static long CheckDownloadSpeed(string url)
        {
            using (var webClient = new WebClient())
            {
                var stopwatch = new Stopwatch();
                stopwatch.Start();
                webClient.DownloadData(url);
                stopwatch.Stop();
                return stopwatch.ElapsedMilliseconds;
            }
        }
    }
}

今回も最後までご覧いただきありがとうございます。


TechTarget

クラウドエンジニア  日山 雅之による記事「Microsoft Azure スマート解説」がTechTarget Japanにて好評連載中です (全7回)