MediaStoreをS3よりも整合性の強いストレージとして理解する

171件のシェア(すこし話題の記事)

はじめに

清水です。「MediaStoreって動画用のストレージらしいから使う機会なさそうだよな…」などと思っていませんか? MediaStoreは「メディア向けに最適化されたAWSストレージサービス」ですが、S3よりも強いデータ整合性モデルを提供しつつ、S3と同様のセキュリティおよび耐久性を持つオブジェクトストレージサービスとも捉えることができます。そのため整合性の観点でS3の使用が難しい場合、MediaStoreを候補に検討することができるのではないかと考えます。本エントリではそんなAWS Elemental MediaStoreとAmazon S3をデータ整合性モデルの面で比較してみたいと思います。

Amazon S3のデータ整合性モデル

まずはAmazon S3のデータ整合性モデルです。

  • 新しいオブジェクトのPUTは書き込み後の読み込み整合性(read-after-write consistency)
  • 上書きPUTおよびDELETEは結果整合性(eventual consistency)

S3を使用する上では、オブジェクトの上書きや削除を行った場合、直後に読み込みを行うと更新前の古い情報を参照してしまう可能性があることに注意しなければなりません。システムやアプリケーションによってはこの点から、S3が利用できないということもありうるかと思います。

なお、一部のリージョンのエンドポイントでは整合性モデルが異なるなど注意点があります。詳細については下記ページ/エントリなども合わせてご参照ください。

AWS Elemental MediaStoreのデータ整合性モデル

続いてAWS Elemental MediaStoreのデータ整合性モデルです。AWS Media Servicesの1つで「S3をベースとしたメディア最適化ストレージサービス」と紹介されることが多いですが、データ整合性モデルについては即時整合性(immediate consistency)が提供されています。

AWS Elemental MediaStore は動画の生成およびストレージ用のサービスで、ライブ生成に求められる高いパフォーマンス、予測可能な低レイテンシー、即時整合性を提供します。 AWS Elemental MediaStore ドキュメント

新規オブジェクト書き込み後の即時読み込み整合性に加え、S3では保証されていなかった上書き操作後の読み込み整合性も提供されています。 つまり、S3を利用する上での注意点であった「データ更新時に以前のデータが参照される可能性がある」ということを気にせずに利用できるオブジェクトストレージサービスとなります。

加えて、S3と同等の耐久性とセキュリティがあります。S3をベースとしているということもあり、操作体系なども類似しています。例えばS3ではバケットでデータをまとめますが、MediaStoreでも同様にコンテナという単位でデータをまとめます。バケットポリシーのような「コンテナポリシー」を用いてアクセスを制御可能で、Publicなコンテナとしてhttp/httpsでアクセスできるように設定することもできます。

MediaStoreはどのようにして即時整合性を提供しているのか

ではAWS Elemental MediaStoreはどのようにしてS3をベースにしつつ、即時整合性(immediate consistency)を提供しているのでしょうか。re:Invent2017のセッションやAWS Elemental MediaStoreのFeaturesページなどにいくつか情報がありました。まとめてみると以下のようになります。

  • 高性能ストレージ層(キャッシュ)と標準層(S3)の2層に別れる
  • コンテンツ書き込み時や更新時は前段の高性能ストレージ層にオブジェクトが保持される
  • 書き込みや変更後、数分でS3(標準層)に移行される

S3の前段にキャッシュとなる高性能ストレージ層を置くことで即時整合性ならびに高いパフォーマンス、低レイテンシを実現しているようですね。そのため、注意事項として直ちに耐久性が必要なワークロードでは、S3を直接使用することを推奨しています。(MediaStore Featuresの「What is the durability of content written to AWS Elemental MediaStore?」の項目。)またMediaStore全体の容量は無制限とされていますが、1ファイルあたりの最大容量は10MBとなっていることなどにもご注意ください。

なぜ即時整合性を持つストレージがメディア最適化となるのか

AWS Elemental MediaStoreが即時整合性を持つオブジェクトストレージサービスということがわかりました。

それではなぜ、このような即時整合性を持つストレージがメディア最適化、動画配信用にリリースされたのでしょうか。AWS Elemental MediaStoreのことを調べていくと、ファイル(オブジェクト)あたりの容量制限が10MBということにもすぐに気がつくと思います。動画を保存するのに1ファイルの最大容量が10MBは少ないのでは?と、普通は考えてしまうと思います。

MediaStoreはメディア最適化ストレージと説明されますが、特にライブ配信用のオリジンとしての用途が推奨されています。現在ライブ動画配信の主流はHLSやmpeg-DASHという規格で、以下の2つの要素(ファイル)で構成されます。

  • プレイリストファイル(マニフェストファイル)
    • 最新のセグメントファイルの情報が記載される(テキスト)ファイル
  • セグメントファイル
    • 数秒単位で分割された動画本体が格納される

ライブ配信の仕組み上、プレイリストファイルは数秒単位で頻繁に更新され、頻繁にアクセスされます。S3のデータ整合性モデル(上書きPUT時の結果整合性)では古いプレイリストファイルを参照していしまう可能性があり、これが大きな問題となります。この解決のためMediaStoreという即時整合性を持つ(そしてS3と同等の耐久性などを持つ)サービスがメディア最適化ストレージとしてリリースされたのかな…と考えます。

まとめ

AWS Elemental MediaStoreとAmazon S3をデータ整合性モデルの観点で比較してみました。AWS Elemental MediaStoreはAmazon S3が持っていなかった上書き操作後の読み込み整合性が提供される、S3ベースのオブジェクトストレージサービスと言えます。

実はAWS Media Servicesリリース当初、AWS Elemental MediaStoreの利点についてあまりよくわかっていませんでした。そんな中見つけたのがフォーラムの以下のスレッドです。

この話題から即時整合性について理解し、ライブ動画配信時はもちろん、メディア用途ではなくてもこれまで結果整合性によりS3の使用を諦めていた場面でMediaStoreが使えるのではないか、と思った次第です。もちろん、その他もろもろの条件がマッチする必要がありますが、整合性の強いストレージが必要な場合、一度AWS Elemental MediaStoreを検討してみるのはいかがでしょうか。