【问题标题】:S3 Eventual consistency: Is it safe to delete an object while there's an outstanding copy for it?S3 最终一致性:在对象存在未完成副本的情况下删除对象是否安全?
【发布时间】:2018-11-22 03:59:46
【问题描述】:

我正在从与目标存储桶不同的源存储桶发出 S3 CopyObject(又名 PUT 副本)。我想知道在 CopyObject 向 REST 客户端返回 OK 后删除源是否安全。 “安全”是指目标对象最终会出现,并且它最初将包含所有副本发布时可用的数据。

副本中的损坏可能不太可能(鉴于大多数操作是原子的),但是这两个操作相互取消可能是可能的。我希望这些文档对eventual consistency 更加充实。

(在我的场景中,在此期间没有写入源密钥或目标密钥。同一客户端执行复制和删除)。

例如同步伪代码:

try:

    # make sure this is a create. read-after-create consistency
    my_tmpname = "new_tempfile" + uuid4()
    s3_put(data, "s3://my-bucket1/" + my_tmpname)

    ...

    # copy it to its final location
    s3_copy("s3://my-bucket1/new_tempfile", "s3://my-bucket2/final_location")
finally:
    # Cleanup temp file.
    #
    # Can this delete interfere with the copy in flight?
    # e.g. Should one wait a few seconds/minutes?
    # e.g. Should one ensure that the target exists before deleting source?
    s3_delete("s3://my-bucket/new_tempfile")

【问题讨论】:

  • 它是一个同步调用。只要在复制过程中不从脚本外部删除源文件,就可以了。

标签: amazon-web-services amazon-s3


【解决方案1】:

是的,使用该对象作为源对象的复制操作成功后立即删除该对象是完全安全的,因为复制操作不是异步的。

在操作成功或失败之前,复制请求不会返回。

为帮助更好地确保数据持久性,Amazon S3 PUTPUT 对象复制 操作在返回 SUCCESS 之前跨多个设施同步存储您的数据。

https://docs.aws.amazon.com/AmazonS3/latest/dev/DataDurability.html

S3 中的一致性模型仅与对象的可见性有关,与它们的存储持久性无关。

【讨论】:

  • 所以,一定要等复制完成后再开始删除。很高兴知道 PUT 和 PUT-COPY 是同步的!
【解决方案2】:

Amazon S3 为 PUT 和您举例说明的复制案例提供写后读一致性:

Amazon S3 数据一致性模型

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

检查文档以确保其他操作的一致性。

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

【讨论】:

  • 该页面上的大多数示例都涵盖了通过相同键完成的一致性(例如,相同键的后读)。
猜你喜欢
  • 2022-06-22
  • 2016-11-25
  • 1970-01-01
  • 2012-09-10
  • 2011-03-28
  • 2019-03-02
  • 1970-01-01
  • 2017-02-01
  • 2017-01-24
相关资源
最近更新 更多