12

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

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

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

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

问:Amazon S3 采用什么数据一致性模型?

美国西部(俄勒冈)、美国西部(加利福尼亚北部)、欧洲(爱尔兰)、亚太地区(新加坡)、亚太地区(东京)、亚太地区(悉尼)和南美洲(圣保罗)区域的 Amazon S3 存储桶提供读取- 新对象的 PUTS 写入后一致性和覆盖 PUTS 和 DELETES 的最终一致性。美国标准区域中的 Amazon S3 存储桶提供最终一致性。

我使用的是美国标准区域。

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

1 回答 1

10

我不认为那个常见问题条目中的一致性声明说明了在并发写入同一个键期间会发生什么。

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

Amazon S3 从不添加部分对象;如果您收到成功响应,Amazon S3 会将整个对象添加到存储桶中。

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

于 2013-03-28T23:42:41.660 回答