这是我参与「第五届青训营」伴学笔记创作活动的第 1 天,本文主要介绍了分布式系统理论的发展与实践。
分布式系统概述
分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标。可以分为分布式计算、分布式存储、分布式数据库等。
优势:
- 去中心化
- 低成本
- 弹性
- 资源共享
- 可靠性高
挑战
- 普遍的节点故障
- 不可靠的网络
- 异构的机器与硬件环境
- 安全
Raft协议
-
概述
Raft协议是一种分布式一致性算法(共识算法),即使出现部分节点故障,网络延时等情况,也不影响各节点,进而提高系统的整体可用性。Raft是使用较为广泛的分布式协议。
-
三种角色
· Leader-领导者:负责处理所有的客户端请求,并向Follower同步请求日志,当日志同步到大多数节点上后,通知Follower提交日志。
· Follower-跟随者:接收并持久化Leader同步的日志,在Leader告知日志可以提交后,提交日志。
· Candidate-备选者:Leader选举过程中的临时角色。向其他节点发送请求投票信息。
-
四种定义
· Log(日志):节点之间同步的信息,以只追加写的方式进行同步,解决了数据被覆盖的问题。
· Term(任期号):单调递增,每个Term内最多只有一个Leader。
· Committed:日志被复制到多数派节点,即可认为已经被提交。
· Applied:日志被应用到本地状态机:执行了log中命令,修改了内存状态。
-
状态转移
-
Leader选举过程
- 初始全部为Follower;
- CurrentTerm+1;
- 选举自己;
- 向其他参与者发起RequestVote请求,retry直到:1.收到多数派请求,成为Leader,并发送信条;2.收到其他Leader的请求,转为Follower,更新自己的Team;3.收到部分,但未达到多数派,选举超时,随机timeout开始下一轮。
-
Log Replication过程
新Leader产生,Leader和Follower不同步,Leader强制覆盖Followers的不同步的日志。
-
切主 :当Leader出现问题时,就需要进行重新选举
Leader发现失去Follower的响应,失去Leader身份;
两个Follower之间一段时间未收到心跳,重新进行选举,选出新的Leader,此时发生了切主;
Leader自杀重启,以Follower的身份加入进来。
-
Stale读:
发生Leader切换,old Leader收到了读请求。如果直接响应,可能会有Stale Road。
-
日志复制
复制状态机:
复制状态机的基本思想是一个分布式的状态机,系统由多个复制单元组成,每个复制单元均是一个状态机,它的状态保存在操作日志中。如下图所示,服务器上的一致性模块负责接收外部命令,然后追加到自己的操作日志中,它与其他服务器上的一致性模块进行通信,以保证每一个服务器上的操作日志最终都以相同的顺序包含相同的指令。一旦指令被正确复制,那么每一个服务器的状态机都将按照操作日志的顺序来处理它们,然后将输出结果返回给客户端。