什么是Azure Lease Blob?

use*_*286 6 locking azure azure-blob-storage

什么是Azure Lease Blob?它只是一种为blob存储提供独占锁定的机制吗?这有什么特别之处?我在哪里可以使用它?我试图阅读Azure文档,但我还不清楚.

Gau*_*tri 8

什么是Azure Lease Blob?它只是一种为blob存储提供独占锁定的机制吗?

你的理解是正确的.租用blob时,会获得该blob的独占锁定.只要租赁blob,租赁持有人以外的任何人都不能修改或删除blob.你可以获得一个temporary lease,持续时间可以是15至60秒之间的任何时间或者infinite lease.

我在哪里可以使用它?

Azure Virtual Machines最常使用此功能.如您所知,Azure VM由Azure Page Blobs支持.因此,在创建VM时,将在保存该Azure VM的VHD的blob上获取无限租约,以便其他进程无法修改或删除该Blob.

您希望使用租约blob功能的另一个地方是您希望实现Leader Election模式.

例如,考虑一种情况,您希望通过后台工作者角色处理存储在blob存储中的文件.进一步假设存在多个该工作者角色的实例,其中每个实例在30秒后唤醒,并检查容器中的blob以及是否发现实例处理它的任何blob.

由于Azure工作者角色本质上是无状态的,因此没有锁定该blob,每个实例都将处理该blob(不是您想要的).为了避免这种情况,你可以做的是让每个实例尝试获取该blob上的租约.只有一个实例会成功(因此被选为领导者).其他实例将无法获取该blob上的锁定.领导者实例将处理blob.

另一个例子是您希望在Competing Consumers其中分配工作的地方分配工作.在我们的一个产品中,我们使用这种Leader Election模式.通过blob租赁功能,我们找到了一个领导者(能够获得blob租约的消费者),然后这个领导者在其他消费者中分配工作.

  • 让一名工人等待锁的情况怎么样?考虑到工人A首先获得了租赁并将对其进行更新。B尝试锁定,但没有成功。Azure下文中的任何内容是否都等待指定的超时,直到可以获取租约?因为A将完成相对较快的更新。B是否可以简单地指定一个合理的超时时间来等待锁,并确保B在获得锁之前已将A的更改提交给它? (2认同)
  • @JoeyCarson 答案是否定的。但解决方法是将获取最小值放入 while 循环中,并在循环内使用 try..catch。捕获 409 异常以留在循环中。 (2认同)