什么是Azure租赁Blob?

26

Azure租赁Blob是什么?它只是提供给Blob存储的独占锁机制吗?它有什么特别之处?在哪里可以应用它?我尝试阅读Azure文档,但我还没有完全明白。


示例使用请参见 https://medium.com/@VeyoTech/using-an-azure-lease-blob-as-a-distributed-mutex-a9608c918801。 - Michael Freidgeim
2个回答

37
Azure租赁Blob是什么?它只是提供对Blob存储的独占锁定机制吗?
您的理解是正确的。当您租赁Blob时,您将获得该Blob的独占锁定。只要Blob被租用,除了租用持有人之外,没有人可以修改或删除该Blob。您可以获得临时租约,其持续时间可以在15到60秒之间,也可以获得无限租约
我在哪里可以使用它?
最常见的情况是Azure虚拟机使用此功能。正如您所知,Azure VM由Azure页面Blob支持。因此,创建VM时,会在保存该Azure VM的VHD的Blob上获取无限租约,以便没有其他进程可以修改或删除该Blob。
另一个您想使用租赁Blob功能的地方是当您想要实现Leader Election模式时。
例如,考虑这样一种情况:您希望通过后台工作角色处理存储在 Blob 存储中的文件。进一步假设有多个运行 Worker Role 的实例,其中每个实例在 30 秒后唤醒并检查容器中的 blob,如果找到任何 blob,该实例将处理它。
由于 Azure 工作角色本质上是无状态的,没有锁定该 blob,每个实例都会处理该 blob(这不是您想要的)。为避免这种情况,您可以让每个实例尝试获取该 blob 的租约。只有一个实例会成功(因此被选为领导者)。其他实例将无法获得该 blob 的锁。领导者实例将处理该 blob。
另一个例子是您想要在竞争消费者中分配工作,您希望在它们之间分配工作。在我们的某些产品中,我们正在使用此模式与领导者选举模式。通过 blob 租赁功能,我们找到了一个领导者(能够获得 blob 租赁的消费者),然后该领导者在其他消费者之间分配工作。

2
如果让一个工作线程等待锁会怎样呢?考虑工作线程A首先获取租约并将其更新。B尝试锁定,但未成功。在Azure基础架构中是否有任何东西等待指定的超时时间,直到可以获取租约?因为A将相对快速地完成更新。B是否可以简单地指定合理的超时时间来等待锁,并确保在B获取锁之前已提交了A的更改? - Joey Carson
2
@JoeyCarson 答案是否定的。但是解决方法是将获取最小值的操作放入一个 while 循环中,并在循环内部使用 try..catch。通过捕获 409 异常来保持循环。 - Shawn de Wet

0
在微服务架构中,我们也可以将其用作分布式锁。想象一下,许多实例/服务尝试在资源/对象/工件上执行相同的任务,任何人都可以获取锁并完成工作。否则,它必须等待锁被释放。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接