这是我参与「第五届青训营 」伴学笔记创作活动的第18天
共识协议
RAFT协议
RAFT协议是一种分布式一致性算法,即使出现部分节点故障、网络延时等情况也不影响各节点,进而提高系统的整体可用性。
- leader: 领导者,通常一个系统是一主多从,leader负责处理所有的客户端请求,并向follower同步请求日志,当日志同步到大多数节点后通知follower提交日志
- follower: 跟随者,不会发送任何请求,接受并持久化leader同步的日志,在leader告知日志可以提交后提交日志。当leader出现故障时,主动推荐自己为candidate
- candidate: 备选者,leader选举过程中的临时角色,向其他节点发送请求投票信息,如果获得大多数选票则晋升为leader
- log: 日志,节点之间同步的信息,以只追加写的方式进行同步,解决了数据被覆盖的问题
- term: 任期号,单调递增,每个term内最多只有一个leader
- committed: 日志被复制到多数派节点,即可认为已经被提交
- applied: 日志被应用到北极状态机
Paxos协议
Paxos算法是基于消息传递且具有高度容错特性的一致性算法 与RAFT区别
- paxos可以并发修改日志,raft写日志操作必须是连续的
- paxos可以随机选主,不必最新最全的节点当选leader
优点:写入并发性能高,所有节点都能写入
缺点:没有一个节点有完整的最新的数据,恢复流程复杂,需要同步历史记录
步骤
- Proposers获取proposal ID N并向所有acceptors广播
- 如果n>min_proposal,则min_proposal :=n,acceptors返回accepted_value和proposal
- proposers接收过半数回复,选择proposal最大的accepted_value作为共识
- proposers广播Accept(n,value)到所有节点
- 如果n>=min_proposal,则min_proposal :=n,accepted_value :=value,本地持久化并返回
- 接收过半请求,如果有结果>n,更新新的提议,跳转步骤1