我从云设计模式(http://msdn.microsoft.com/en-us/library/dn568104.aspx)看了领导者选举模式。它使用了在其他地方描述的方法(http://blog.smarx.com/posts/managing-concurrency-in-windows-azure-with-leases),并在Stack Overflow(Windows Azure - leader instance without single point of failiure)的至少一个其他问题中提到。
一般而言,选举过程归结为竞争Blob存储租约的流程。租赁本身是独家的,因此只有一个过程可以在给定的时间点保持它。在领导者选举模式中,租约最初是在预定义的时间段内(15到60秒之间)获得的,并由持有租约的流程上运行的后台线程续订。
我在徘徊的是这个解决方案是否没有可能的竞争条件。如果由于某种原因,当前的领导者无法及时更新锁定(大量负载,网络延迟),分布式系统中的不同进程可能会认为它也是领导者吗?
据我所知,该方法在EventProcessorHost中用于事件中心分区租约。
编辑:
我认为这个http://redis.io/topics/distlock解释了如何确保在分区的情况下,没有两个人认为他们是领导者。简而言之,该算法假定在确定无法更新锁定后,进程将立即停止。如果它在租约到期之前尝试更新锁定的时间足够长,则没有其他进程可以获取锁定。