Amazon S3 API - 可以使用伪“锁定”对象吗?

时间:2017-07-20 18:40:51

标签: java amazon-web-services amazon-s3 amazon consistency

我正在考虑使用“锁定”S3对象以防止在给定的S3对象上同时执行相同的操作。但我对这项技术解决方案的有效性表示怀疑。

更确切地说,在对象的操作开始时,将创建对应于对象名称和正在进行的操作类型的锁定文件。

示例:在myObject上myOperation的开头,如果它不存在,将查找并创建lck / myObject / myOperation对象。

这个“锁定”对象将在操作结束时被销毁,无论它是否成功。

我知道标准解决方案是使用数据库,但应用程序目前没有。因此,如果我只能处理与S3的一致性,那就足够了。

我担心的是这个锁对象系统将在多线程/可能多节点架构中运行。 现在,我已经读过Amazon S3支持“一致写后读取”。

这是否意味着如果我的应用程序1(节点1)/线程2通过Java Amazon S3 API将锁定对象放在给定存储桶上,则此锁定对象将立即对其他线程和其他应用程序可见相同的API?

1 个答案:

答案 0 :(得分:2)

不,不幸的是,它不会。从S3 consistency model

  

进程将新对象写入Amazon S3并立即列出密钥   在其桶内。直到更改完全传播,对象   可能不会出现在列表中。

  

Amazon S3目前不支持对象锁定。如果两个PUT   请求同时发出相同的密钥,请求与   最新时间戳获胜。如果这是一个问题,您将需要构建一个   对象锁定机制进入你的应用程序。

因此,如果您的两个线程或进程都尝试在S3中创建锁定,那么它们将被允许但最后写入获胜,因此您没有真正锁定任何内容。锁定工作需要做其他事情