【问题标题】:Amazon S3 API - can pseudo "lock" objects be used?Amazon S3 API - 可以使用伪“锁定”对象吗?
【发布时间】:2017-07-20 18:40:50
【问题描述】:

我正在考虑使用“锁定”S3 对象来防止对给定 S3 对象同时进行相同的操作。但是我对这个技术方案的有效性有很大的怀疑。

更准确地说,在对对象的操作开始时,将创建一个与对象名称和正在执行的操作类型相对应的锁定文件。

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

无论成功与否,这个“锁”对象都会在操作结束时被销毁。

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

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

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

【问题讨论】:

  • 来自@stdunbar 的好答案。要锁定 S3 对象键的 name(或任何名称,实际上......基本上是命名信号量),请考虑将 consistent conditional writes 用于为目的而创建的 DynamoDB 表的可能性锁管理。

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


【解决方案1】:

不,很遗憾它不会。来自 S3 consistency model

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

和:

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

因此,如果您的两个线程或进程都尝试在 S3 中创建锁,它们将被允许但最后一次写入获胜,因此您并没有真正锁定任何东西。还需要发生一些其他事情才能使您的锁定起作用

【讨论】:

    猜你喜欢
    • 2012-03-20
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 2011-01-17
    • 2011-04-03
    • 1970-01-01
    相关资源
    最近更新 更多