concurrency - s3 并发写入

标签 concurrency amazon-s3 cloud

我想我在并发 s3 写入时遇到了问题。两个(或更多)进程同时将几乎相同的内容写入同一个 s3 位置。我想确定控制这种情况将如何发生的并发规则。

按照设计,除了一个进程之外的所有进程都会在写入 s3 时被杀死。 (我说过他们正在编写“几乎”相同的内容,因为除了一个进程之外的所有进程都被杀死了。如果允许所有进程存活,它们最终会编写完全相同的内容。)

我的理论是,被杀死的进程会在 s3 上留下一个不完整的文件,而另一个文件(大概是完全写入的)没有被选为可以在 s3 上存活的文件。我想证明或反驳这个理论。 (我试图找出问题是否是由写入 s3 或其他时间期间的并发问题引起的)。

来自 http://aws.amazon.com/s3/faqs/ 的常见问题解答:

Q: What data consistency model does Amazon S3 employ?

Amazon S3 buckets in the US West (Oregon), US West (Northern California), EU (Ireland), Asia Pacific (Singapore), Asia Pacific (Tokyo), Asia Pacific (Sydney) and South America (Sao Paulo) Regions provide read-after-write consistency for PUTS of new objects and eventual consistency for overwrite PUTS and DELETES. Amazon S3 buckets in the US Standard Region provide eventual consistency.



我正在使用美国标准区域。
  • 这个答案对并发写入有什么看法?我想我理解“写后读一致性”与“最终一致性”之间的区别,但仅限于在写入完成后读取对象时所看到的内容。
  • 被杀死的进程是否有可能“获胜”并因此在 s3 上得到一个不完整的文件?或者 s3 是否以某种方式确保文件只会在整个 PUT 操作完成后放置在 s3 上?
  • s3 如何决定哪个文件“获胜”?这是真正的问题。
  • 最佳答案

    我认为该 FAQ 条目中的一致性声明并没有说明在并发写入同一 key 期间会发生什么。

    但是,在 S3 中不可能有不完整的文件:http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html

    Amazon S3 never adds partial objects; if you receive a success response, Amazon S3 added the entire object to the bucket.



    这意味着只有完全上传的文件才会存在于指定的键处,但我认为这种并发写入可能会导致某些错误情况,导致没有文件被成功上传。我会做一些测试来确定;您可能还希望在使用对象版本控制时尝试使用它,看看它的行为是否有所不同。

    关于concurrency - s3 并发写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14594924/

    相关文章:

    ios - 在另一个执行完毕后运行 Parse 代码

    amazon-web-services - S3 事件和 Cloudwatch 事件之间的区别

    node.js - 如何使用 Node js将base64数据作为图像上传到s3?

    c# - Blob 引用的 BlobType 与 Blob 的 BlobType 不匹配?

    Python线程,Event和Queue如何协同工作?

    java - 避免返回 LIST 时可能出现的并发问题

    php - 在 MYSQL 中使用 SELECT MAX(id) 而不是在 PHP 中使用 mysql_insert_id() 有多糟糕?

    ruby - 使用 ruby​​ sdk 在 Route 53 上创建 ALIAS 记录

    mongodb - 如何访问VPC外的mongodb实例

    amazon-web-services - AWS::RDS::DBInstance 不是从 cloudformation 创建的