【问题标题】:Preventing azure blob from being accessed by other service while it's being created防止 azure blob 在创建时被其他服务访问
【发布时间】:2015-01-23 12:11:11
【问题描述】:

Azure blob API 有时看起来像是由外星人设计的。就像为一些非常奇特的用例而设计的那样,当大多数简单的用例都需要跳过箍时。这是一个这样的。

我有两个工人角色。一个正在创建 blob,另一个正在处理它们(并在处理完成后移至“已完成”文件夹)。 blob 大小可以适度大,例如 100 MB。显然,我不希望第二个角色在 blob 拥有所有数据之前开始读取 blob。好的,可以期待 Lease API 的帮助:获取租约、复制 blob、释放租约。然后,读者也会在处理之前尝试获取租约,因此必须等待。但是不,不能在尚不存在的 blob 上获取租约。此外,我找不到任何方法可以将租约“开启”作为原子操作创建 blob。

如果您知道使它起作用的技巧,请告诉我。此致。

【问题讨论】:

    标签: azure blob blobs


    【解决方案1】:

    显然,我不希望第二个角色在此之前开始阅读 blob 该 blob 包含所有数据。

    假设您正在创建一个BlockBlob,直到提交 blob(或者换句话说,所有数据都写入 blob),对于所有意图和目的,该 blob 将不存在并且不会出现在blob 列表结果(除非您在列出 blob 时特别要求未提交的 blob)。所以我认为你不必在那里做任何特别的事情。

    好的,可以期待 Lease API 的帮助:获取租约, 复制 blob,释放租约。然后,读者也会尝试 在处理之前获取租约,因此必须等待。

    对此有另一种解决方案。你可以做的是使用Azure Queues。当 blob 创建者工作角色完成上传 blob 时,它只是在队列中写入一条消息,该消息将由处理 blob 的工作角色轮询。假设有许多处理器工作者角色实例,那么每个实例都可以GET来自这个队列的消息,其工作方式类似于blob lease(消息仅对一个实例可用),然后开始处理blob。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-09
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 2021-01-08
      • 2018-03-18
      • 2016-08-23
      • 2021-10-12
      相关资源
      最近更新 更多