当前位置: 首页 > 知识库问答 >
问题:

s3并发写入

越新霁
2023-03-14

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

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

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

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

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

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

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

  • 关于并发写操作,这个答案说明了什么?我想我理解了“先读后写一致性”与“最终一致性”之间的区别,但仅限于在写入完成后读取对象时所看到的内容

共有1个答案

葛奇
2023-03-14

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

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

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

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

 类似资料:
  • 我得到一个包含100行数据的表。(Sqlite3和Linux) 这些行上的每个都由多个进程更新。既然同一行不能修改两次(一个进程“拥有”一行并且只有一行),你认为我真的需要使用事务吗?

  • Peewee数据库对象在线程之间共享。我假设这意味着数据库连接也是共享的。 我找不到一个具体的答案,所以我在这里问。

  • 问题内容: 我在AWS中有一个Node 4.3 Lambda函数。我希望能够将文本文件写入S3,并阅读了许多有关如何与S3集成的教程。但是,所有这些都涉及在写入S3之后如何调用Lambda函数。 如何使用节点从Lambda在S3中创建文本文件?这可能吗?亚马逊的文件似乎没有涵盖它。 问题答案: 是的,绝对有可能! 通过选择或更新执行lambda的IAM角色,确保为Lambda函数提供对目标s3存储

  • Go Env: goarch=“AMD64” goroot=“/usr/local/go” goTooldir=“/usr/local/go/pkg/tool/linux_amd64” go15vendorexperiment=“1” go版本GO1.6.3 Linux/AMD64 这个问题发生在高负载的“性能测试环境”库贝-APIServer上。库贝-Apiserver恐慌和退出: 相应源代码:

  • 通常,当一个文件必须上传到s3时,它必须首先写入磁盘,然后使用像TransferManager api这样的应用程序上传到云端。如果上传不能按时完成,这会导致数据丢失(应用程序宕机并在不同的服务器上重新启动,等等)。所以我想知道是否有可能直接通过网络写入一个流,并将所需的云位置作为接收器。