【问题标题】:caveat of the read-after-write consistency for PUTS of new objects in a S3 bucket对 S3 存储桶中新对象的 PUTS 写后读一致性的警告
【发布时间】:2019-04-16 12:01:19
【问题描述】:

来自https://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html

Amazon S3 为所有区域的 S3 存储桶中的新对象的 PUTS 提供写后读一致性,但需要注意的是。需要注意的是,如果您在创建对象之前向键名发出 HEAD 或 GET 请求(以查找对象是否存在),Amazon S3 会为写入后读取提供最终一致性。

我不确定我是否正确理解了警告。 Before creating the object: 好的,我还没有创建键为K的对象,因此不存在键为K的对象;我向 K 发出 GET 请求...根据上面的解释,我的请求会产生什么结果

我很困惑,因为解释说的是eventual consistency for read-after-write。但是目前还没有

【问题讨论】:

    标签: amazon-web-services amazon-s3


    【解决方案1】:

    更新 2020-12-02 这整个讨论现在已经过时了。 Amazon S3 provides strong read-after-write consistency for PUTs and DELETEs of objects in your Amazon S3 bucket in all AWS Regions.

    更新我在阅读this blog post中的评论后重写了答案。

    我相信这个警告是在谈论这种情况

    client 1: GET key_a  -->  this could return an object even this request was sent earlier.
    client 2: PUT key_a
    

    如果client 1 的请求晚于PUT 对节点的请求,这可能是可能的。

    【讨论】:

      【解决方案2】:

      当您有一个文件要上传,但该文件可能已经存在时,就会发生这种情况。因此,与其覆盖现有文件,不如执行以下操作:

      1. 尝试获取文件。它不存在,所以你会得到一个带有No such key 的 404
      2. PUT 文件。
      3. 尝试之后立即获取文件(无论出于何种原因)。

      在此序列中,步骤 #3 可能会或可能不会返回文件。 最终您可以检索文件,但从上传时间到需要多长时间取决于 S3 的内部(我可以推测为什么会发生这种情况,但这只是推测)。

      【讨论】:

      • 扩展 OP 的评论,即 “到目前为止还没有写入” - 从某种意义上说,一定有:内部缓存被写入或索引副本以指示已请求不存在的对象,从而在 S3 中创建内部指示,将对象的存在从“对象存在未知”更改为“对象不存在已确认”,这是可以在内部“记住”的事实一段时间——通常很短,但不保证为 0——并且在处理对象的后续请求时使用此内部指示。
      • 感谢您的回答,但我认为您所写的内容不正确。他们说他们为新对象的 PUTS 提供了写后读的一致性,所以you should always be able to get an object at step 3。请查看我的回答。
      猜你喜欢
      • 1970-01-01
      • 2017-08-14
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 2019-12-23
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      相关资源
      最近更新 更多