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

Alf*_*Alf 16 amazon-s3 eventual-consistency amazon-web-services

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

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

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

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

Joh*_*ein 9

是的,这将是一致的.

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

us-east-1区域(以前称为US-Standard)先前没有读写后一致性,但现在在所有区域都提供.


E.J*_*nan 8

我一直以为您也一样,即写后读取适用于所有客户端,而不仅仅是执行写入操作的客户端。

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

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

什么是写后读一致性?

写后读的一致性使事情变得更加严格,从而保证了新数据对所有客户端的即时可见性。具有写入后读取的一致性,新创建的对象,文件或表行将立即可见,而不会出现任何延迟。


小智 5

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

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

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