Windows Azure-领导实例没有单点故障



我正在寻找一种在多个工人角色实例上拥有" singleton"模块的方法。我想拥有一个并行执行模型,带有队列和多个工人角色。

这个想法是要拥有一个"主"实例,也就是说,请说检查新数据,并通过将其添加到队列中,处理特殊队列中的所有消息来安排它,而不是由没有其他人,并且已将斑点存储作为虚拟驱动器安装,并带有读/写入访问。

我将始终只有一个一个" master实例"。当该主实例出于某种原因下降时,对于主实例(几秒钟),应该很快"选举"一个已经实例化的实例的另一个实例。这应该发生在破损实例被Azure环境(约15分钟)取代的实例之前。

因此,这将是某种自组织的动态环境。我正在考虑基于存储或表数据进行一些锁定。如果我们可以与微处理器术语交谈,则有机会设置锁定时间和某种"看门狗"计时器。

您想要实现的目标有一般的方法。

首先,您的主实例。您可以根据实例ID进行检查。这很容易。您需要roleenvironment.currentroleinstance才能获取"当前实例",现在将ID属性与您从RoleenVironment.currentroleinstance.role.role.role.instances进行比较。类似:

var instance = RoleEnvironment.CurrentRoleInstance;
if(instance.Id.Equals(instance.Role.Instances.OrderBy(ins => ins.Id).First().Id))
{
 // you are in the single master
}

现在,您需要在"治愈"/回收时选举大师。您需要获得Roleenvironment的更改活动。检查它是否是拓扑缩写(只需检查它是否是拓扑变更,您不需要拓扑的确切更改)即可。如果是拓扑变化,请根据上述算法选举下一个主人。请查看有关如何确切执行事件钩和更改检测的出色博客文章。

忘了添加。

如果您喜欢锁 - Blob租赁是获取/检查锁的最佳方法。但是,仅处理Roleenvironment事件和基于实例ID的简单大师选举,我认为您不需要复杂的锁定机制。此外 - 一切都生活在队列中,直到已成功处理。因此,如果主人在处理某件事之前死亡,则"下一个主人"将处理它。

最新更新