gcloud コマンドラインを使用した Cloud Storage の転送速度の向上
Google Cloud Japan Team
※この投稿は米国時間 2021 年 7 月 21 日に、Google Cloud blog に投稿されたものの抄訳です。
驚くべきことに、ビジネス上の多くの問題は、いかに早くバケットを満たせるか(データを転送できるか)というところに行き着きます。特にそのバケットが Cloud Storage にあり、それを Compute Engine インスタンスからのデータで満たす場合はなおさらです。大量のデータを迅速に移行できる Storage Transfer Service のようなサービスもありますが、小規模な移行にはより戦術的なソリューションを必要とすることがあるため、gsutil cp
は高い人気を誇っています。転送を分割して並行して実行することで、gsutil cp
はかなり高速になります。
しかし、gsutil
の転送を高速化するにあたり、微調整が必要な場合もあります。たとえば、単一の大きなファイルの転送に gsutil
を使用している場合、パフォーマンスを最大限に引き出すには、デフォルトの設定を変更しなくてはなりません。
そこでこのたび、Cloud SDK の一連の Cloud Storage コマンドに gcloud storage
を新しく追加いたしました。このコマンドは、デフォルトで高速に動作するように設計されています。
gcloud storage の仕組み
これまでの gsutil
と同様に gcloud storage
も大きなファイルを細かく分割するため、利用可能な帯域幅を最大限に活用して転送できます。gcloud storage の新機能に、タスク管理をグラフ問題として扱い、各作業単位をノード、各依存関係をエッジとして扱う並列化戦略があります。この戦略により、より多くの作業を圧倒的に低いオーバーヘッドで並行して行うことができます。
内部的には、gcloud storage
は、整合性チェックを高速化する新しいハッシュ ライブラリを使用しています。また、ワークロードやローカルマシンのサイズに応じて独自の設定を調整し、パフォーマンスを最適化することもできます。
速度の測定
以下の環境で、gcloud storage
のパフォーマンスを測定しました。
us-east4 - VM とバケットのリージョン
n2d-standard-16(8 個の vCPU、32 GB のメモリ)
RAID0 に 1 個の 375GB NVME を使用
サイズが 100 MB のファイルを 100 個転送した場合、gcloud storage
は gsutil
よりもダウンロードで 79%、アップロードで 33% 高速でした。どちらもファイルを分割して個別のファイルとしてアップロードし、その後で 1 つのファイルに再結合する複合アップロード戦略を採用しています。
1 つの大きなファイルを転送する場合、その違いはさらに顕著です。10 GB のファイルでは、gcloud storage
は gsutil
よりもダウンロードで 94%、アップロードで 57% 高速でした。広範なテストや調整を必要とせずにこれだけパフォーマンスが向上するということは、転送時間が大幅に短縮されたことを明らかに示しています。
使ってみる
Cloud SDK を最新バージョンに更新すると、次のコマンドを実行して gcloud storage を試すことができます。
gcloud alpha storage ls gs://pub
gcloud alpha storage cp -r gs://pub/shakespeare/ .
gcloud storage
は現時点で、以下の機能をサポートしています。これらの機能は、gsutil でも現在使用されています。
再帰的なアップロード / ダウンロード
S3 サポート
複合アップロード
スライス化によるダウンロード
再開可能なアップロード / ダウンロード
オブジェクト / バケットの一覧表示
オブジェクト / バケットの削除
gcloud storage
はプレビュー版であることにご注意ください。Cloud Storage の機能を最大限に反映するために、今後さらに機能を追加していく予定です。それまでの間、バケットへのより高速化されたデータ転送をご活用ください。
謝辞: これを実現してくれた Google Cloud エンジニア チームの Nick Hartunian、テクニカル リーダー Dilip Pednekar、Ross Rauber に感謝します。
-Cloud Storage エンジニアリング マネージャー Thomas MacLean