CAP理论
- C:consensus,一致性
- A:availabili,可用性
- P:partition tolerance,分区容错性
- 一个分布式系统中,无法同时满足CAP三个要求,只能舍弃其中一个
一致性模型
- 弱一致性
- 只保证最终结果是一致的
- 例子:DNS服务器,Gossip
- 强一致性
- 保证每时每刻都是一致的
- 例子:Paxos,Raft,ZAB
强一致性算法思想
- 主从复制:如果一个从节点失败,则Master阻塞,导致整个集群不可用,保证了一致性,却大大降低了可用性,不可取
- 大多数原则:每次写入都保证写入大于N/2个节点,每次读取都保证大于从N/2个节点读
Raft协议是什么
-
Raft协议是分布式系统强一致性算法
-
Raft协议来自Stanford,根据Paxos算法改进而来
Raft协议核心
- Raft协议主要依靠选举机制,日志复制和大多数原则实现分布式一致性
Raft协议概述
- Raft协议规定分布式系统中的节点状态有三种,分别为:领导者,跟随者,被选举者
- 新数据只能通过领导者写入,新数据会写入领导者的日志中,新数据会放入心跳包中发送给跟随者,跟随者收到最新数据后会写进跟随者的日志中,然后发送响应包给领导者
- 当领导者知道大多数跟随者已经完成日志写入后,会将数据提交,然后通过心跳包告诉跟随者和用户新数据已经完成提交,跟随者也提交数据
- 用户只能访问到已经提交的数据
Raft协议选举过程
- Raft协议规定每个跟随者有一个超时时间,这个超时时间是随机的
- 当一个跟随者在超时时间内都没有收到领导者发送的心跳包,则会转变为被选举者,向其他的节点发送信息,请求投票
- 如果被选举者得到超过半数的票,则成为下一任领导者,会通过发送心跳包,将自己的数据发送给跟随者,跟随者完成同步写入
- 如果被选举者没有得到超过半数票,则进入下一次超时等待
- 当系统中两个节点同时参数选举,并且获得相同的票数,则两个节点分别等待不同的时间,谁先超时,谁成为新的一任领导者
Raft协议处理网络分区
- 当系统中存在网络分区时,每个分区中如果不存在leader,则会选举出一个新的leader,每个leader都会接收用户写入,并告知其跟随者进行写入
- 如果分区中没有大多数(以所有分区的全部节点总数为标准)节点完成复制,则无法进行提交,整个分区处于卡住状态
- 如果有大多数节点写入,则进行提交
- 当网络分区恢复后,任期小的分区节点会放弃当前未提交内容,转而去同步任期大的分区的leader的数据