我想我在并发 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.
我正在使用美国标准区域。
最佳答案
我认为该 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/