システムエンジニアの椎葉です。
ファイル数が多くなるとファイルの転送に時間がかかってしまいます。
ファイル転送の改善で処理時間やEC2のコストを削減することができます。
今回の例でも30%ほど転送時間&コストを削減することができているので是非参考にしてみてください。
設定項目
今回改善するために変更する設定は下記の2つです。
項目名 | 説明 |
---|---|
max_concurrent_requests | 同時に実行できるリクエストの最大数を制御。この設定により、バケットへの同時アクセスを制御することができる。デフォルト:10 |
max_queue_size | タスクキュー内の最大タスク数を制御。タスクが多くなると速度も速くなるが、比例して多くのメモリが必要になる。デフォルト:1000 |
設定変更のコマンド
設定を変更する際は下記のコマンドを実行します。
aws configure set default.s3.max_concurrent_requests 100 aws configure set default.s3.max_queue_size 1000
「.aws/config」ファイルに下記のように設定が反映されます。
[default] s3 = max_concurrent_requests = 100 max_queue_size = 1000
使用するサンプルデータ
今回使用するサンプルはファイルサイズ1MB以下のデータ217,739個となります。
設定値毎の処理速度の違い
「aws s3 cp」「aws s3 sync」コマンドで確認を行いました。
設定 | AWSコマンド | 処理時間 |
---|---|---|
max_concurrent_requests:10 max_queue_size:1000 |
aws s3 sync | 15:50 |
max_concurrent_requests:10 max_queue_size:1000 |
aws s3 cp --recursive | 15:11 |
max_concurrent_requests:100 max_queue_size:1000 |
aws s3 cp --recursive | 11:30 |
max_concurrent_requests:100 max_queue_size:1000 |
aws s3 sync | 11:17 |
max_concurrent_requests:100 max_queue_size:10000 |
aws s3 sync | 11:01 |
max_concurrent_requests:1000 max_queue_size:100000 |
aws s3 sync | 11:11 |
検証結果
一定以上の数値にするとそれ以上は設定を変えても結果は変わらないようです。 今回の検証ではmax_concurrent_requests:100、max_queue_size:1000の設定が良い結果となりました。 転送速度やメモリの容量によって最適な値が変わってくるので環境ごとに最適な設定値を設定する必要があります。
終わりに
処理時間の改善やコスト削減で、この記事が皆さんの参考になると嬉しいです。
ここで紹介したもの以外にも改善できる設定等はあるので引き続き検証していきたいと思います。
www.slideshare.net