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

What does read-after-write consistency really mean on new object PUT in S3?

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

"Amazon S3 provides read-after-write consistency for PUTS of new objects in your S3 bucket in all regions with one caveat."

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

我怀疑答案是它在全球范围内都有效,但找不到确定的答案。

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

这个博客 post 似乎证实了这一点(无论其价值),但我也没有在官方 AWS 文档上找到任何明确的答案:

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

What is Read-After-Write Consistency?

Read-after-write consistency tightens things up a bit, guaranteeing immediate visibility of new data to all clients. With read-after-write consistency, a newly created object or file or table row will immediately be visible, without any delays.

是的,它会是一致的。

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

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

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

在分布式系统文献中也有 'read-your-own-write' 一致性模型,'consistent read across clients after write' 是最终的 objective(并不是说这是不可能的)。

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