こんにちは、佐々木です。re:Inventの基調講演で発表されたAmazon S3 Express One Zoneについて、さっそく調査してみました。
写真は、re:Inventの会場にいたS3のマスコットキャラです。イベント初日は、Express One Zoneの腹巻をしていなかったのですが、サービス発表後はExpress One Zoneという名前で会場内を闊歩していました。
Amazon S3 Express One Zoneとは?
Amazon S3 Express One Zoneは、S3の新しいストレージクラスです。従来も、ひとつのAZのみにデータを配置するOne Zoneもありましたが、これはコスト削減を主眼としたストレージクラスです。今回発表されたExpress One Zoneは、名前に明記している通り、速さに特化したサービスラインナップです。発表では、特に小さなファイルに対してのレイテンシが小さく、従来のS3より10倍早いケースもあるとのことです。これは完全に機械学習などのデータ読み込みの特性に対応したものを用意してきたということでしょう。
なおキーノートでの発表の文脈については、こちらの記事でまとめています。併せて見ていただければ、幸いです。
Amazon S3 Express One Zoneの性能検証
小さなファイルが早いということで、早速性能の検証をしてみました。こちらの方で以前調査したのですが、Athenaからデータを取得する際は、ファイルサイズが小さい大量のファイルがある場合は、S3がボトルネックになります。そこで、10KBのサイズのファイルを70万個ほど用意して、通常のストレージクラスとExpress One Zoneを比較してみました。
比較の観点は、3つです。
- EC2からデータアップロードとダウンロードの速さ
- Athenaからクエリー実行した際のレスポンス時間
- APIリクエストのコスト比較(机上評価)
なお、S3バケットは東京リージョンのapne1-az1です。S3にAZの概念が出てくるのに、ひどく不思議な感じがします。またaとかcなどといったAZ名ではなく、AZ-IDで表示されるのは、他のAWSアカウントから利用する事を考えての配慮ですね。アカウントによって、おなじap-northeast-1aでも、物理的なデータセンターは違う可能性があるからです。(AWSのAZの割り当ては、アカウントごとに違うという話)
データのアップロード・ダウンロードの比較
まずはEC2からS3へ、データのアップロードとダウンロードの速度の比較です。テストのケースですが、サイズが小さく大量のファイルを用意して、それを検証してみます。S3の使い方としては、アンチパターンに近いです。しかしここは、キーノートでも改善したと言っていたし、顕著に差がつくはずということで検証してみました。
検証方法としては、Pythonからboto3を呼び出して、それぞれ10回実行して平均の値を出しています。アップロード・ダウンロードとも、対象のファイル数は77,577個で、個々のファイルはだいたい10kbくらいです。pythonのコードは、以前の検証で利用したものを流用しています。S3 Express One Zone対応として、下記のような修正が必要でした。明示的にリージョンを指定することと、ExtraArgsとして、ストレージクラスとして"EXPRESS_ONEZON"を指定しています。そのため、boto3も最新化が必要です。
s3_client = boto3.client('s3', region_name='ap-northeast-1') def upload_file_to_s3(file_path, bucket_name, object_name): s3_client.upload_file( file_path, bucket_name, object_name, ExtraArgs={'StorageClass': 'EXPRESS_ONEZONE'} )
アップロード・ダウンロードの測定結果
標準 | Express One Zone | 標準との比較 | |
---|---|---|---|
アップロード時間 | 849.47秒 | 197.89秒 | 429% |
ダウンロード時間 | 1411.23秒 | 382.24秒 | 369% |
圧倒的にExpress One Zoneが早いですね。10倍とまではいかないものの、3~4倍の改善はしています。 なお、ファイルアップロード・ダウンロードについては、チューニングの余地はたくさんあります。しかし、両者ともチューニングなしの同一条件での比較で実施しています。
Athenaからクエリーを実行した際の比較
次にAthenaからクレリーを実行した際の比較をしてみましょう。これは、先程のデータではなく、更にデータ件数を10倍くらいにしたデータセットを対象にしています。なぜ、同一の件数でアップロード・ダウンロードも測定しなかったのか。それは、アップロードにとんでもない時間がかかって、それを10回試行した日には1週間くらいかかりそうだったからです。
標準 | Express One Zone | 標準との比較 | |
---|---|---|---|
クエリ時間 | 75.91秒 | 52.30秒 | 145% |
アップロード・ダウンロードほど顕著ではないものの、45%と大きく改善しています。
S3 APIリクエストのコスト比較(机上評価)
Athenaのベーシックな料金体系では、読み込んだデータ料によって決まります。しかし、裏でS3に対してのAPIリクエストでの料金も発生しています。そこを含めたものがAthenaのコストと言えるでしょう。S3 Express One Zoneでは、APIのリクエストのコストもおさえられいます。ここでは、東京リージョンのS3のGet APIのコストを比較してみましょう。ファイルの総数は、13,709.261件で、APIのコールは1,000件単位での課金計算になります。なので、13,709×API単価となります。ExpressのGet単価は$0.0002で、標準クラスは$0.001と5倍違います。
標準 | Express One Zone | 標準との比較 | |
---|---|---|---|
料金 | $13.79 | $2.74 | 500% |
検証まとめ
標準 | Express One Zone | 標準との比較 | |
---|---|---|---|
アップロード時間 | 849.47秒 | 197.89秒 | 429% |
ダウンロード時間 | 1411.23秒 | 382.24秒 | 369% |
クエリ時間 | 75.91秒 | 52.30秒 | 145% |
料金 | $13.79 | $2.74 | 500% |
Express One Zoneがデータ分析に活躍するという触れ込みには、間違いありませんね
アンチパターンでない検証
一方で、今回の検証は、最初に話したとおりアンチパターンによる検証です。小さな大量のファイルがアンチパターンということで、一般的な最適解である100MBくらいのファイルサイズであれば、それぞれどうなるのでしょうか?データの合計のバイト数は同じで、100MBで100件のデータで検証してみます。
標準 | Express One Zone | 標準との比較 | |
---|---|---|---|
アップロード時間 | 84.88秒 | 67.89秒 | 125% |
ダウンロード時間 | 79.77秒 | 79.81秒 | 100% |
クエリ時間 | 2.59秒 | 2.24秒 | 116% |
料金 | $0.001 | $0.0002 | 500% |
どうでしょうか?大量のファイルを呼び出すオーバーヘッドが無い分、大幅に性能が改善し、コストも下がっています。ダウンロードの場合は、100MBという大きなファイルになるとAPI呼び出しに関するオーバーヘッドは、ほぼ無視できるもので標準ストレージクラスでもExpress One Zoneでもほぼ同じ速度となりました。アップロードについては、AZ間への内部的なレプリケーションが必要なので、標準ストレージの方が遅くなっているようです。
また、Athenaに関しては圧倒的なパフォーマンスの差が出ています。これはそもそも最初に行った検証がAthenaにとってアンチパターンと言える状態で測定していたためです。ストレージクラスの最適化の前に、アプリケーションとしての最適化が必要ということですね。
まとめ
データ分析に向いているということで、さっそくS3 Express One Zoneの検証をしてみました。前評判に違わず、しっかりと性能アップしていました。データ分析の際に、データアクセスが課題になっているのであれば、ぜひS3 Express One Zoneを検討してみてください。中間処理のS3ファイルの置き場として、EMRやGlueなど様々なサービスからの利用が考えられます。
一方で、S3 Express One Zoneを検討する前に、ファイルサイズの検討はしっかりしてください。ストレージクラスの変更より、ファイルサイズ・ファイル数の方がパフォーマンスへの影響が大きいことが多いです。S3の性能は、S3にとどまらず様々なサービスの性能に影響してきます。それぞれのストレージクラスの特性をしっかり把握して、ただしく使っていきましょう。
また、この段階でExpressという特性でS3に新しいストレージクラスを出してくるAWSの戦略は素晴らしいなと思いました。この辺りは、顧客の困っている事に、真摯に耳を傾けているのだなというのがわかりますね。