乐趣区

关于分布式:分布式选举算法

1. 分布式根本实践

  • cap 实践:
     
    consistency:一致性
     
    availablity:可用性
     
    partition tolerance:分区容错
     
    分布式服务在零碎呈现肯定故障的时候,还能够对外提供服务。根本所有分布式系统都能够满足此要求。c 和 a 之间存在矛盾,如果谋求一致性就须要摈弃可用性,如果谋求可用性,数据一致性就不会被满足。
     
  • base 实践:
     
    basic available:根本可用
     
    softstatue:软状态
     
    eventually:最终一致性
     
    零碎能够处于一致性中间状态,但可用,零碎能够达到最终一致性状态,其实现办法能够应用基于消息中间件 + 定时工作补发音讯来实现。
     

2. 分布式一致性算法

 
    在 cap 实践中,如果保证数据强一致性,就须要所有正本同步主节点的所有数据,在数据同步过程中,对外不可用,在所有分布式一致性算法中,解决此的思维是大多数正本同步(个别都是过半)主节点的数据后,主节点就能够应用对客户端进行相应。
 

  • basic paxos 算法
     
    basic paxos 算法有 prepare、accept 和 learn 三个阶段,以及提案者,决策者和学习者。
     
    prepare 阶段:提案者发出请求到过半的决策者,申请中携带生成的全局惟一递增 id, 该 id 能够是工夫戳 + 机器 id。
     
    accept 阶段:决策者接管到提案者的 id 信息后,通过比拟保留的 id 和申请的 id 大小,如果申请的 id 大于保留的 id,就会把保留中的最大的 id 及对应的提案值作为响应发送给提案者。而且之后决策者会回绝所有 id 小于以后的 id 的提案申请,只承受大于以后 id 的申请。当提案者接管到决策者过半的响应后,就会在所有响应中获取最大 id 的提案值作为提案值,发送给过半决策者,此过半决策者能够与提案决策者不同,决策者收到申请后,就会提交申请。
     
    learn 阶段:所有 learner 同步决策者的数据。具体形式能够是每一个 learner 去申请 accept,也能够所有 learner 抉择一个主 learner,主 learner 同步 accept 的数据,其余 learner 同步主 learner。

     
    上述 paxos 算法是 basic paxos 算法,如果有多个提案者,就会导致活锁问题。为了解决此问题,提出只有一个主提案者,在多个提案者中,先抉择一个主提案者,所有的提案都由该主提案者进行提交。
     

  • Raft 算法
     
    leader 选举
     
    日志同步
     
  • zab 算法
     

    • 启动选举 leader
      每台机器发送 (myid,zxid) 到别的机器,别的机器查看是否是在选举过程中,而后比拟 zxid,投票给 zxid 大的,如果 zxid 雷同就投票给 myid 大的,等到有机器接管到一半以上的投票后即成为 leader

 

  • 运行中选举
    逻辑大抵同启动时选举 leader, 只不过换成 sid 和 zxid,过半投票机制。而后再同步数据。

 

  • kafka 选举
     
    isr 列表
     
    高水位 HW
     
    过半机制
退出移动版