1. Raft协议[分布式一致性算法]

  • : 跟随者
  • leader: 领导者

2. 过程

  • 当某个节点经历完election timeout成为candidate后,开启新的一个选举周期,他向其他节点发起投票请求(Request Vote),如果接收到消息的节点在该周期内还没投过票则给这个candidate投票,然后节点重置他的election timeout。
  • 当该candidate获得大部分的选票,则可以当选为leader。
  • leader就开始发送给其他follower节点,这个消息会在内部指定的heartbeat timeout时间内发出,follower收到该信息则响应给leader。
  • 这个选举周期会继续,直到某个follower没有收到心跳,并成为candidate。
  • 首先一个客户端发送一个更新给leader,这个更新会添加到leader的日志中。
  • 然后leader会在给follower的下次心跳探测中发送该更新。
  • 一旦大多数follower收到这个更新并返回给leader,leader提交这个更新,然后返回给客户端。
  • 当发生网络分区的时候,在不同分区的节点接收不到leader的心跳,则会开启一轮选举,形成不同leader的多个分区集群。
  • 当客户端给不同leader的发送更新消息时,不同分区集群中的节点个数小于原先集群的一半时,更新不会被提交,而节点个数大于集群数一半时,更新会被提交。