AWS S3, GCP GCS, Azure Blob Storage 等、様々なオブジェクトストレージサービスが存在します。
S3, GCS のそれぞれに複数のファイルをアップロードし、合計時間にどの程度差異があるかを確認します。
条件
- 1 ファイルあたりのサイズは 1 MB (ファイルの生成方法:
dd if=/dev/urandom of=dummy bs=1M count=1
) - 1 プロセスで 100 ファイルをアップロードし終わるまでの時間を見る
- アップロードには、各サービスが提供している公式コマンドを利用する (awscli, gsutil)
- アップロード元のサーバは、各サービスのコンピュートサービスを利用し、可能な限りリソース量の近いもの、ブースト機能を備えないものを選択する (m3.medium@EC2,n1-standard-1@GCE)
- オブジェクトストレージと、コンピュートサービスの Region,AZ は同じ、もしくはできるだけ近いものを選択する
アップロードスクリプト
- S3
#!/bin/bash
count=0
while :
do
echo $count
[[ count -eq 100 ]] && break
aws s3 cp ./dummy s3://bucketname/${count}
count=$(($count+1))
done
- GCS
#!/bin/bash
count=0
while :
do
echo $count
[[ count -eq 100 ]] && break
gsutil cp ./dummy gs://bucketname/${count}
count=$(($count+1))
done
実行方法
それぞれ、3 回繰り返します。
for i in 1 2 3
do
time ./upload
done
結果
1 回目 | 2 回目 | 3 回目 | |
---|---|---|---|
S3 | 3m37.910s | 3m36.647s | 3m35.076s |
GCS | 1m41.030s | 1m39.567s | 1m38.644s |
本検証方法では、アップロードにかかる時間は S3 > GCS となりました。
しかしながら、awscli, gsutil は、実行時に本検証とは関連のないモジュールの読み込みや処理を行っている可能性もあるため、次回は、できるだけそのような差異が出ないよう、SDK (Golang) を用いて必要最低限の API をコールする形で同様の検証を実施してみたいと思います。