「Rcloneを使用したクラウドベースのデータストレージの管理」

「Rcloneを使って楽々!クラウドベースデータストレージの管理術」

複数のオブジェクトストレージシステム間でデータ転送を最適化する方法

Photo by Tom Podmore on Unsplash

企業はクラウドベースのストレージソリューションにますます依存するようになり、適切なツールと技術を持つことが重要です。これにより、彼らのビッグデータを効果的に管理できます。以前の投稿では(例えば、こちらやこちら)、クラウドストレージからデータを取得するためのさまざまな方法について探求し、その方法がさまざまなタスクで効果的であることを実証しました。特定のタスクに最適なツールは(ファイル形式、データファイルのサイズ、データアクセスパターンなど)によって異なることを見つけました。また、最適化したいメトリクス(レイテンシ、スピード、コストなど)にも依存します。この記事では、クラウドベースのストレージ管理のための別の人気ツールである「クラウドストレージのスイスアーミーナイフ」とも呼ばれるrcloneコマンドラインユーティリティについて探求します。70以上のストレージサービスプロバイダーをサポートするrcloneは、Amazon S3用のAWS CLIやGoogleストレージ用のgsutilなどのベンダー固有のストレージ管理アプリケーションと同様の機能をサポートしています。しかし、rcloneは十分に高いパフォーマンスを発揮して代替案となるのでしょうか? rcloneが最適なツールとなる状況はあるのでしょうか?次のセクションでは、rcloneの使用法をデモンストレーションし、そのパフォーマンスを評価し、さまざまなオブジェクトストレージシステム間でのデータ転送での価値を強調します。

免責事項

この記事は、公式のrcloneドキュメントを置き換えるものではありません。また、rcloneや他のツールの使用を推奨するものでもありません。クラウドベースのデータ管理には、プロジェクトの詳細に大いに依存するため、十分なプロジェクト固有のテストに基づいて決定する必要があります。この記事を読んでいる時点で入手可能な最新のツールと比較しながら、私たちの述べた内容を再評価してください。

Rcloneを使用したクラウドストレージからのデータ取得

次のコマンドラインでは、rclone syncを使用してクラウドベースのオブジェクトストレージパスの内容をローカルディレクトリと同期します。この例では、Amazon S3ストレージサービスを使用していますが、異なるクラウドストレージサービスを使用することもできます。

rclone sync -P \            --transfers 4 \            --multi-thread-streams 4 \            S3store:my-bucket/my_files ./my_files 

rcloneコマンドには、その動作をプログラムするための数十のフラグがあります。 -Pフラグは、データ転送の進行状況、転送速度、全体時間などを出力します。上記のコマンドでは、rcloneのランタイムパフォーマンスに影響を及ぼす(多くの)制御のうち、2つを含めています。 transfersフラグは、同時にダウンロードする最大ファイル数を決定し、multi-thread-streamsフラグは、単一のファイルを転送するために使用するスレッドの最大数を決定します。ここでは、両方をデフォルト値(4)のままにしています。

rcloneの機能は、rclone設定ファイルの適切な定義に依存します。以下では、上記のコマンドラインで使用されているリモートS3storeオブジェクトストレージの場所の定義を示します。

[S3store]    type = s3    provider = AWS    access_key_id = <id>    secret_access_key = <key>    region = us-east-1

これまでにrcloneを実行してみた結果を見ましたが、気になるのは、よく知られたAWS CLIなどの他のクラウドストレージ管理ツールと比べて、rcloneがどのような価値を提供しているのかという問題です。次の2つのセクションでは、私たちが以前の記事で詳しく調査したシナリオで、rcloneのパフォーマンスをいくつかの代替ツールと比較します。それぞれのシナリオは、1) 2GBのファイルをダウンロードする場合と、2) 1000個以上の1MBのファイルをダウンロードする場合です。

シナリオ1:大きなファイルをダウンロードする場合

以下のコマンドは、AWS CLIを使用して、Amazon S3から2GBのファイルをダウンロードするものです。これは、以前の記事で評価した多くの方法のうちの一つです。パフォーマンスを計測するために、Linuxのtimeコマンドを使用しています。

time aws s3 cp s3://my-bucket/2GB.bin .

報告されたダウンロード時間は約26秒(つまり、約79MB/s)でした。この値は、私たち自身のローカルPC上で計算されたものであり、実行環境によっては大きく異なる場合があります。同等のrclone copyコマンドは次のようになります:

rclone sync -P S3store:my-bucket/2GB.bin .

私たちの環境では、rcloneのダウンロード時間は標準のAWS CLIよりも2倍以上遅かったです。適切なrcloneの制御フラグの調整により、これを大幅に改善することができる可能性が非常に高いです。

シナリオ2:大量の小さなファイルをダウンロードする場合

このシナリオでは、サイズが1MBの800個の比較的小さなファイルをダウンロードするランタイムパフォーマンスを評価します。以前のブログ記事では、このシナリオをディープラーニングのトレーニングワークロードにデータサンプルをストリーミングするコンテキストで議論し、s5cmd beastモードの優れたパフォーマンスを示しました。beastモードでは、s5cmdが複数の並列ワーカー(デフォルトでは256)を使用して、オブジェクト-ファイル操作のリストを作成し実行します。以下に、s5cmdのbeastモードオプションの例を示します:

time s5cmd --run cmds.txt

cmds.txtファイルには、以下の形式の800行が含まれています:

cp s3://my-bucket/small_files/<i>.jpg <local_path>/<i>.jpg

s5cmdのコマンドには、平均9.3秒の時間がかかりました(10回のトライアルの平均)。

rcloneは、s5cmdのbeastモードに似た機能をファイルからのコマンドラインオプションとしてサポートしています。以下のコマンドでは、デフォルトの並列処理設定(256)に合わせて、800のファイルに対してrclone copyを実行しています。

rclone -P --transfers 256 --files-from files.txt S3store:my-bucket /my-local

files.txtファイルには以下のような800行が含まれています:

small_files/<i>.jpg

私たちの800個のファイルに対するrclone copyは、10回のトライアルの平均で8.5秒かかり、s5cmdよりもわずかに短かかったです。

これまでに示した結果だけでは、既存のツールよりもrcloneを選ぶ理由になるかどうかを納得していただけないかもしれません。次のセクションでは、rcloneの潜在的な利点の一つを示すユースケースについて説明します。

オブジェクトストレージ間のデータ転送

今日では、開発チームが複数のオブジェクトストアでデータを管理することは珍しいことではありません。これには、ストレージの障害に対する保護の必要性や、複数のクラウドサービスプロバイダからのデータ処理オファリングの利用を決定することが動機となる場合があります。例えば、AI開発のソリューションでは、Amazon S3でデータを使用してAWSでモデルのトレーニングを行い、Azure Storageに格納された同じデータを使用してMicrosoft Azureでデータ分析を実行することがあります。さらに、FlashBladeCloudian、またはVASTのようなローカルストレージインフラストラクチャにデータのコピーを保持したい場合もあります。これらの状況では、安全で信頼性があり、タイムリーに複数のオブジェクトストア間でデータを転送および同期する能力が必要です。

一部のクラウドサービスプロバイダは、そのような目的のための専用サービスを提供しています。ただし、これらは常にプロジェクトの具体的なニーズを満たさないことがあり、また、望むレベルの制御を可能にしない場合もあります。たとえば、Google Storage Transferは、指定されたストレージフォルダ内のすべてのデータを迅速に移行することに優れていますが、(本文作成時点では)それ以内の特定の一部のファイルの転送をサポートしていません。

考えられる別のオプションは、既存のデータ管理をこの目的に使用することです。この場合の問題は、AWS CLIやs5cmdなどのツールが(本文作成時点では)ソースとターゲットのストレージシステムに異なるアクセス設定セキュリティ資格情報を指定することをサポートしていないということです。したがって、ストレージ場所間でデータを移行するには、それを中間(一時)場所に転送する必要があります。以下のコマンドでは、s5cmdとAWS CLIの使用を組み合わせて、システムメモリを介してAmazon S3からGoogle Storageにファイルをコピーしています:

s5cmd cat s3://my-bucket/file \      | aws s3 cp --endpoint-url https://storage.googleapis.com      --profile gcp - s3://gs-bucket/file

これは、単一のファイルを移行するための合法的ながらも不器用な方法ですが、実際の実践では、数百万のファイルを転送する能力が必要になるかもしれません。これをサポートするために、複数の並列ワーカー/プロセッサを生成および管理するための追加のレイヤーを追加する必要があります。問題は、すぐに複雑になる可能性があります。

Rcloneを使用したデータ転送

AWS CLIやs5cmdなどのツールとは異なり、rcloneはソースとターゲットに異なるアクセス設定を指定できるようにします。次のrclone構成ファイルでは、Google Cloud Storageアクセスのための設定を追加しています:

[S3store]    type = s3    provider = AWS    access_key_id = <id>    secret_access_key = <key>[GSstore]    type = google cloud storage    provider = GCS    access_key_id = <id>    secret_access_key = <key>    endpoint = https://storage.googleapis.com

ストレージシステム間での単一のファイルの転送は、それをローカルディレクトリにコピーする場合と同じ形式です:

rclone copy -P S3store:my-bucket/file GSstore:gs-bucket/file

ただし、rcloneの本当のパワーは、上記で説明したfiles-fromオプションとこの機能を組み合わせることにより得られます。データ移行の並列化のためにカスタムソリューションを組み立てる必要がなく、単一のコマンドを使用してファイルの長いリストを転送することができます:

rclone copy -P --transfers 256 --files-from files.txt \            S3store:my-bucket/file GSstore:gs-bucket/file

実践的には、オブジェクトファイルのリストをより小さなリスト(たとえば、1つのリストにつき10,000個のファイル)に分割し、各リストを別のコンピュートリソースで実行することでデータ移行をさらに高速化することができます。この種のソリューションの具体的な効果は、プロジェクトごとに異なるものですが、開発の速度と効率に大きなブーストを提供することができます。

要約

この記事では、rcloneを使用したクラウドベースのストレージ管理を探求し、複数のストレージシステム間のデータの維持と同期の課題にその応用を示しました。データ転送のための他の代替ソリューションは確かに存在しますが、rcloneベースの方法の利便性と優雅さには疑いの余地がありません。

クラウドベースのストレージソリューションの効率を最大化する方法に関する私たちの投稿の一つです。重要なこのトピックに関する他の投稿もぜひご覧ください。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more