Azureでグローバルにデータをコピーするとどのくらい時間がかかるのか
ファイルコピーの需要は根強い
グローバルで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
アクセス回線パターン
- 一般的な回線
- 自宅(川崎)
- OCN光 100M マンションタイプ
- 宅内は802.11ac(5GHz)
- 川崎でアクセス回線に入り、横浜(保土ヶ谷)の局舎からインターネットへ
- ゲートウェイ名から推測
- いい感じの回線
- 日本マイクロソフト 品川オフィス
- 1Gbps 有線
- Azureデータセンターへ「ネットワーク的に近くて広帯域」
コピーするファイル
- 総容量: 約60GB
- 6160ファイル
- 1MB * 5000, 10MB * 1000, 100MB * 100, 500MB * 50, 1000MB * 10
- Linux fallocateコマンドで作成
ファイル形式パターン
- ファイル、Blobそのまま送る (6160ファイル)
- ディスクイメージで送る (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がありませんが、意識して仕組みを作ると得をします。