这是我参与「第四届青训营 」笔记创作活动的的第7天
本节课学习一致性协议,了解它的工作原理以及之后的发展方向。
一、分布式一致性协议
1.分布式系统
随着数据规模增长、服务可用性要求的提高、快速迭代的业务要求我们从单系统向分布式系统发展,实现高性能、正确、可靠的系统。
然而,分布式系统存在CAP:
CAP是指在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)这三个要素最多只能同时实现两点,不可能三者兼顾。
所以,我们在此主要分析分布式系统的一致性。
2.协议类别
分布式一致性协议主要分为两大类,分别是单主协议和多主协议。
(1)单主协议
整个分布式系统就像一个单体系统,所有写操作都由主节点处理并且同步给其他副本。 协议:zab协议、Raft协议、Paxos协议
(2)多主协议
所有写操作可以由不同节点发起,并且同步给其他副本。 协议:Gossip协议、Pow协议
两者的核心区别是单主协议只允许主节点发起写操作,一致性更强,多主协议只能做到弱一致性。
3.共识算法
共识算法是当一个值被确定后所有人都认同。应用层面不同的一致性,都可以用共识协议来实现。
二、Raft案例
前面提到Paxos协议和Raft协议都是单主协议,Raft算法是对Paxos算法的简化和改进,是目前业界广泛使用的分布式一致性协议,用来实现分布式系统中的强一致性。
1.Raft原理
遵循Raft算法的分布式集群中每个节点扮演以下三种角色之一:
leader:领导者,其负责和客户端通信,接收来自客户端的命令并将其转发给follower
follower:跟随者,执行来自leader的命令
candidate:候选者,当follower长时间没收到 leader的消息就会成为候选者,抢夺成为leader的资格
系统中最多只有一个leader,如果在一段时间里发现没有leader,则大家通过选举-投票选出leader。leader会不停的给follower发心跳消息,表明自己的存活状态。如果leader故障,那么follower会转换成candidate,重新选出leader,任期在Raft中称为term。
选举过程如下:
- 增加节点本地的 current term ,切换到candidate状态
- 投自己一票
- 并行给其他节点发送 RequestVote RPCs
- 等待其他节点的回复
三、发展方向
1.一致性协议作为系统
分布式日志:暴露日志的接口提供给上层应用,提供灵活高可用的一致性服务
2.高性能一致性协议
低延时:结合 RDMA 网络以及可编程交换机,实现 us 级别操作。
LeaderLess:节点就地提交,降低 WAN 网络下 RTT 开销