d.p*_*pov 4 singleton azure azure-worker-roles
我正在寻找一种在多个工作者角色实例上拥有"Singleton"模块的方法.我想在Azure中使用队列和多个辅助角色的并行执行模型.
想法是希望有一个"主"实例,也就是说检查新数据,并通过将其添加到队列来处理它,处理来自特殊队列的所有消息,而不是其他任何人处理的,并已将blob存储装置作为虚拟驱动器,具有读/写访问权限.
我将永远只有一个 "主实例".当主实例由于某种原因而关闭时,已经实例化的实例应该很快被"选举"为主实例(几秒钟).这应该在Azure环境用新的实例替换破坏的实例之前发生(大约15分钟).
所以它将是某种自组织,动态的环境.我想根据存储或表数据进行一些锁定.如果我们可以与微处理器术语交谈,有机会设置锁定超时和某种"看门狗"计时器.
对于您想要实现的目标,有一般方法.
首先,你的主实例.您可以根据实例ID进行检查.这很容易.您需要RoleEnvironment.CurrentRoleInstance来获取"当前实例",现在将Id属性与您从RoleEnvironment.CurrentRoleInstance.Role.Instances第一个成员按Id排序的内容进行比较.就像是:
var instance = RoleEnvironment.CurrentRoleInstance;
if(instance.Id.Equals(instance.Role.Instances.OrderBy(ins => ins.Id).First().Id))
{
// you are in the single master
}
Run Code Online (Sandbox Code Playgroud)
现在你需要在"治疗"/回收时选出主人.您需要获取RoleEnvironment的Changed事件.检查它是否是TopologyChange(只需检查它是否是拓扑更改,您不需要拓扑中的确切更改).如果是拓扑更改 - 根据上述算法选择下一个主站.看看这篇伟大的博客文章,了解如何准确地执行事件挂钩和更改检测.
忘了添加.
如果你喜欢锁 - blob lease是获取/检查锁的最佳方式.但是,只使用RoleEnvironment事件和基于实例ID的简单主选举,我认为您不需要那种复杂的锁定机制.此外 - 一切都存在于队列中,直到成功处理.因此,如果主人在处理某事之前死亡,那么"下一个主人"将处理它.
归档时间: |
|
查看次数: |
1013 次 |
最近记录: |