[UPDATE] Amazon S3で強い書き込み後の読み込み整合性がサポートされました! #reinvent

Amazon S3でstrong read-after-write consistencyがサポートされました。これまで結果整合性だった上書きPUTとDELETE操作でも書き込み後の読み込み整合性が提供され、すぐにオブジェクトの最新情報の取得が可能になっています。
2020.12.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

清水です。はじまっていますre:Invent 2020!すでにたくさんの新サービス登場やアップデート情報が発表されていますが、本エントリでお届けするのはこちら、オブジェクトストレージサービスであるAmazon S3で強い書き込み後の読み込み整合性(strong read-after-write consistency)がサポートされました!すでにすべてのリージョンで利用可能になっています。

本エントリでは、このアップデート内容について速報としてまとめてみます。

これまでのAmazon S3の整合性について

このアップデート内容の詳細に入る前に、まずはこれまでのAmazon S3の整合性について確認しておきましょう。Amazon S3がリリースされたのは2006年、それからこれまでに多少の変更はありましたが、基本的には結果整合性という点を意識して使う必要がありました。

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

具体的にはAmazon S3を使用する上で、オブジェクトの上書きや削除を行った場合、直後に読み込みを行うと更新前の古い情報を参照してしまう可能性がありました。ワークロードによってはこの整合性モデルが問題になり、Amazon S3が使えないという場面もあったかと思います。Jeff Barのブログエントリにも記載がありますが、例えばAmazon EMRではこの回避のためにEMRFS Consistent Viewが必要だったり、HadoopではS3Guardというものを使う必要がありました。

詳細については以下エントリなどもご参照ください。

またLIST操作についても、新しいオブジェクトのAmazon S3への書き込み後、変更が完全に反映されるまでオブジェクトがリストに表示されないことがある、という制限がありました。

新たにAmazon S3でサポートされた強い書き込み後の読み込み整合性について

今回のAmazon S3のアップデートでは、強い書き込み後の読み込み整合性(strong read-after-write consistency)がサポートされました。具体的には、これまでサポートされていた新しいオブジェクトのPUTに対する書き込み後の読み込み整合性に加えて、上書きPUTとDELETEに対する書き込み後の読み込み整合性もサポートされました。これまではオブジェクトの上書き後に更新前の情報を参照してしまう可能性がありましたが、これがなくなり上書き後にすぐに最新の情報にアクセスができます。またLIST操作にも一貫性が提供されるようになり、書き込み後に変更を反映したオブジェクトのリストをすぐに取得することができます。オブジェクトタグやACL、メタデータの変更に対する操作の一貫性も高まっているとのことです。うれしい点として、これらのアップデートは自動的に適用され、追加コストも発生しません

アップデートの利点として、これまでAamzon S3の整合性モデルから利用が必要だったEMRFS Consistent ViewやS3Guardが不要になり、ビッグデータワークロード実行時のコスト削減などが挙げられています。

ただし注意点として、すべての操作で書き込み後の読み込み整合性がサポートされたわけではなく、アップデート情報を確認する限りはDELETE操作に対する記述は見当たりません。つまりDELETE操作については引き続き結果整合性(eventual consistency)ということになります。

2020/12/02 17:00 JST 記載内容を修正しました。

本エントリ公開当初、アップデート情報にDELETE操作の記述が見つからなかったことから、DELETE操作については引き続き結果整合性と記載していましたが、下記、Amazon Simple Storage Service Developer Guide (English)にてオブジェクトのDELETE操作についても強い書き込み後の読み込み整合性(strong read-after-write consistency)が提供されている記載がありました。PUTならびにDELETEについて強い書き込み後の読み込み整合性が提供されるというアップデートとなります。訂正させていただきます。

補足として、バケット構成は引き続き結果整合性(eventual consistency)モデルが適用されるため、バケットを削除してすぐにすべてのバケットを一覧表示すると、削除されたバケットが引き続きリスト表示されることあります。(こちらも上記Developer Guide、「Amazon S3 data consistency model」に記載があります。)

まとめ

Amazon S3を使用する上で注意するべきだった大きな点である上書きPUTとDELETEに対する結果整合性、今回のアップデートで晴れて書き込み後の読み込み整合性がサポートされるようになり、これまで整合性モデルの点からAmazon S3が使えない、もしくは別ツールと併用する必要があった、といったケースでもAmazon S3が使用できるようになったかと思います。個人的には大変ビッグなアップデートであり、昨晩のAndy JassyのKeynote後の仮眠を経て、寝ぼけ眼でアップデート情報を確認している中で飛び起きるようなニュースでした。これはもう、「Amazon S3 v2」とか「Amazon S3 2.0」とか、「Amazon Simple Storage Service Second」とか、いやむしろ「Amazon Simple Storage Service Second Season」とか名乗ってもいいのでは?ぐらいのテンションでエントリを書いています。またAWSのストレージサービスで結果整合性よりも強い整合性をサポートしているサービスとして、メディア向け特化したサービスですがAWS Elemental MediaStoreというものがあります。こちらは即時整合性(immediate consistency)を提供しているサービスですが、こちらとの比較なども気になりました。追って調査してみたいと思います。

2020/12/04 23:00 JST 記載内容全体について少しブラッシュアップしました。