标签:
简直崩溃
假设有3个节点,其ID分别为1、2、3。开始运行时,每个节点的leaderId都为1。
(1)节点1、2、3启动后,都进入looking状态,开始leader选举。令1为始发节点,将其加入nowNodes中,并设置它的isStart为真。则节点1查找全局变量totalNodes,发现除了自己还有2和3节点,则向2,3发送自己的nowNode消息。
(2)节点2收到节点1的消息,首先查看当前状态,发现STATE处于looking状态。查看自己的状态isStart是否为真[初始化均为假],发现否,则不能结束。然后节点2在nowNodes中查找是否已存在自己,不存在,将自己加入nowNodes中。查找全局变量totalNodes,发现3还不在nowNodes中,然后向3发送nowNodes。
感觉不可能建一个全局变量,得到所有进程的id号,并存入链表中。
如果发送规则,是向除了我,并且没有响应过的节点发,则死掉的节点一直不会回应,有很多冗余的发送【第一次不回应,就该标记为死亡节点,但是万一中途活了呢】,而且重要的是消息不会回到始发节点,算法没法结束。
如果向除了自己的节点发,冗余消息则太多了。
或者,传递的消息中就应该包含始发节点的id,当前的节点,发现没有未响应的活着的节点的时候,就将消息发送给始发节点,传递结束。
但是,我感觉环顺序是没有用的。
问题就是要选择一个leader,让leader广播不是挺好吗?当然广播,leader的性能容易成为瓶颈。按环顺序相当于串行,又有点浪费时间= =
标签:
原文地址:http://www.cnblogs.com/froid/p/4620561.html