读写后一致性对S3中的新对象PUT意味着什么?

时间:2017-03-22 16:29:17

标签: amazon-web-services amazon-s3 eventual-consistency

亚马逊文档(http://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html#ConsistencyModel)声明:

“Amazon S3为所有地区的S3存储桶中的新对象的PUTS提供了写后读写一致性,但有一点需要注意。”

忽略警告,这意味着在PUT之后为新对象发出GET的客户端可以保证获得正确的结果。我的问题是,如果GET是从不同的客户端而不是PUT的那个客户端发出的,那么保证是否也适用(假设GET当然按照时间顺序跟随PUT)?换句话说,读写后一致性只是读写一致性还是适用于所有客户端?

我怀疑答案是它在全球范围内有效,但无法找到明确的答案。

3 个答案:

答案 0 :(得分:7)

是的,这将是一致的。

客户的概念'是无关紧要的,因为每个API调用都是独立的。

us-east-1区域(以前称为US-Standard)以前没有写入后读写一致性,但它是now provided in all regions

答案 1 :(得分:6)

我总是假设你一样,即写后读取适用于所有客户端,而不仅仅是执行写操作的客户端。

这篇博客文章似乎证实了它(它的价值),但我也没有在AWS官方文档中找到任何明确的答案:

https://shlomoswidler.com/2009/12/read-after-write-consistency-in-amazon.html

  

什么是Read-After-Write一致性?

     

写后读写一致性稍微收紧一点,保证   立即可见所有客户的新数据。使用read-after-write   一致性,新创建的对象或文件或表行   立即可见,没有任何延迟。

答案 2 :(得分:2)

截至 2020 年 12 月 1 日 (https://aws.amazon.com/blogs/aws/amazon-s3-update-strong-read-after-write-consistency/),S3 确实提供了强读后写一致性。但是,仍然不清楚来自不同客户端(发送 PUT 请求的客户端除外)的 GET 是否会看到更新的结果。该博客提到,“你写的就是你会读到的,LIST 的结果将准确反映桶中的内容。”

此外,在分布式系统文献中,还有“读取您自己的写入”一致性模型,并且“写入后跨客户端一致读取”是最终目标(并不是说这是不可能的)。

我怀疑 S3 对于来自不同客户端的读取最终是一致的。我觉得 AWS 在这一点上应该更清楚。