Azureでグローバルにデータをコピーするとどのくらい時間がかかるのか

Posted on Jun 13, 2017

ファイルコピーの需要は根強い

グローバルでAzureを使うとき、データをどうやって同期、複製するかは悩みの種です。Cosmos DBなどリージョン間でデータ複製してくれるサービスを使うのが、楽ですし、おすすめです。

でも、ファイルコピーを無くせないもろもろの事情もあります。となると、「地球の裏側へのファイルコピーに、どんだけ時間かかるのよ」は、課題です。

調べてみた

ということで、いくつかのパターンで調べたので参考までに。測定環境は以下の通り。

ツールと実行環境

  • AzCopy 6.1.0
  • Azure PowerShell 4.1.0
  • Windows 10 1703
  • ThinkPad X1 Carbon 2017, Core i7-7600U 2.8GHz, 16GB Memory

アクセス回線パターン

  1. 一般的な回線
  • 自宅(川崎)
  • OCN光 100M マンションタイプ
  • 宅内は802.11ac(5GHz)
  • 川崎でアクセス回線に入り、横浜(保土ヶ谷)の局舎からインターネットへ
    • ゲートウェイ名から推測
  1. いい感じの回線
  • 日本マイクロソフト 品川オフィス
  • 1Gbps 有線
  • Azureデータセンターへ「ネットワーク的に近くて広帯域」

コピーするファイル

  • 総容量: 約60GB
    • 6160ファイル
    • 1MB * 5000, 10MB * 1000, 100MB * 100, 500MB * 50, 1000MB * 10
  • Linux fallocateコマンドで作成

ファイル形式パターン

  1. ファイル、Blobそのまま送る (6160ファイル)
  2. ディスクイメージで送る (1ファイル)
  • Managed Diskとしてアタッチした100GBの領域にファイルシステムを作成し、6160ファイルを配置
  • 転送前にデタッチ、エクスポート(Blob SAS形式)
  • AzCopyではなくAzure PowerShellでコピー指示 (AzCopyにBlob SAS指定オプションが見当たらなかった)

対象のAzureリージョン

  • 東日本 (マスター、複製元と位置づける)
  • 米国中南部 (太平洋越え + 米国内を見たい)
  • ブラジル南部

転送パターン

  • ユーザー拠点の端末からAzureリージョン: AzCopy Upload
  • Azureリージョン間 (Storage to Storage)
    • ファイル: AzCopy Copy
    • イメージ: PowerShell Start-AzureStorageBlobCopy

結果

形式  コピー元      コピー先         コマンド   並列数  実行時間(時:分:秒)
ファイル  自宅 Azure 東日本 AzCopy Upload 2 07:55:22
ファイル  自宅 Azure 米国中南部 AzCopy Upload 2 10:22:30
ファイル  自宅 Azure ブラジル南部 AzCopy Upload 2 12:46:37
ファイル  オフィス Azure 東日本 AzCopy Upload 16 00:20:47
ファイル  オフィス Azure 米国中南部 AzCopy Upload 16 00:45.11
ファイル  オフィス Azure ブラジル南部 AzCopy Upload 8 02:07.58
ファイル  Azure 東日本 Azure 米国中南部 AzCopy Copy N/A 00:28:55
イメージ  Azure 東日本 Azure 米国中南部 PowerShell N/A 00:11:11
ファイル  Azure 東日本 Azure ブラジル南部 AzCopy Copy N/A 00.25:33
イメージ  Azure 東日本 Azure ブラジル南部 PowerShell N/A 00.09:20

考察

  • アクセス回線の差が大きく影響

    • 自宅パターンでプロバイダから帯域制限されていたかは不明 (自宅からAzure東日本まで16Mbpsくらいは出た)
    • アクセス回線が細い場合はユーザー拠点から「まとめて」送らないほうがいい
      • こまめに送る
      • Azure内でデータを生成する
    • もしくはExpressRouteを引く (自宅で、とは言っていない)
  • アクセス回線が細い場合、AzCopy Uploadの並列数を下げる

    • AzCopyのデフォルト並列数は実行環境のCPUコア数 *8だが、今回実施した端末での並列数(4コア * 8 = 32)ではかえって性能が劣化した
    • アクセス回線に合わせて並列数は調整する
  • Azureのリージョン間コピーは早い

    • Azureバックボーンを通るから
    • 端末よりAzureストレージのほうがリソース的に強いし負荷分散しているから
  • 地理的な距離感覚だけで考えてはダメ

    • 地理的な近さではなく、ネットワーク的な近さと太さ
    • Azureバックボーンを使うと日本とブラジルの間でもそれなりのスループット
  • ファイル数が多いときはイメージで送るのも手

    • ファイル数がコピー時間に影響する (1 vs 6160)
    • そもそもアプリがBlobとして使うのか、ファイルシステムとして使うかにもよるが…
      • もしファイルシステムとして、であれば有効な手段
      • エクスポートのひと手間は考慮
  • Azureバックボーンを使うと、意外にブラジル近い

    • 土管か(ない

Azureバックボーンの帯域にはSLAがありませんが、意識して仕組みを作ると得をします。