首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure表存储-分布式锁定

Azure表存储-分布式锁定
EN

Stack Overflow用户
提问于 2016-11-14 21:07:38
回答 2查看 896关注 0票数 0

我将事件数据存储在表存储中。每个工作者角色实例都需要访问该表中的唯一行,并对此数据进行一些处理,如果处理成功,则需要将此数据标记为已完成,以便任何其他实例都不会获取此数据。在处理过程中,此行需要对其他工作人员不可见,这样他们就不会同时处理这一行。

有没有可以解决这个问题的设计?

EN

回答 2

Stack Overflow用户

发布于 2016-11-15 14:38:26

因此,Azure表没有锁定机制。它可用于blobs和队列。

解决此问题的一种可能方法是使用Master/Slave Pattern。因此,让我们假设您有5个工作角色实例在运行。所有这些实例都会定期(比如每30秒)尝试获取blob的租约。只有一个实例能够成功,该实例将成为主实例(所有其他实例将成为从实例)。

现在,任务要做的是从表中获取数据(比如5条记录),并将它们作为单独的消息插入到队列中。一旦主服务器这样做了,它就会自动成为从服务器。slaves要做的是从队列中获取一条消息(将消息出队,以便其他实例看不到该消息),处理它,然后更新表中的记录。一旦从属程序完成了它的工作,它将重新进入睡眠状态,但在该预定时间之后才会醒来。

更多详情请查看Competing Consumer Patterns

票数 1
EN

Stack Overflow用户

发布于 2016-11-23 17:39:23

使用Azure队列和生产者消费者模式,将工作单元作为消息写入生产者端的队列,并让你的工作者角色使用队列中的工作并处理它。Queue将处理使消息在处理过程中不可见以避免重复,然后每个工作角色都可以在成功处理消息后将其从队列中删除。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40589520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档