这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
今天课程的内容主要讲述分布式系统。在分布式系统中,多个节点需要共同工作完成任务,因此需要对某一个任务达成共识,这样才能共同完成目标。而RAFT协议就是这么一种共识算法(Consensus Algorithm),被广泛应用于工业场景。
在raft协议中,每个节点有三种身份:leader、follower和candidate。整个系统中每个时刻只有一个leader,负责接受所有客户端的调用,组织日志复制到其他节点;follower负责接收leader的复制日志,按照leader命令进行相应操作。当leader正常运行时,它会向其他所有节点发送心跳包;而当follower在一段时间内未接收到leader的心跳包后,它便会认为leader发生了宕机,于是该follower变成candidate,进行leader election步骤。系统在leader正常运行时执行leader的命令,当leader宕机后选举出新leader,继续组织运行。这样raft协议的关键就是leader election和log replication(即leader正常运行时组织全部节点工作的流程)两种情况。
首先所有节点都有currentTerm的信息,表示当前记录leader的任期号。当follower未收到leader的信息后,它将自身currentTerm加一,然后身份转为candidate,在系统中发布投票请求,得票最多的节点成为新的leader(每个节点每段term内只能投一个人)。因为系统中有多个节点,可能同时多个节点都成为了candidate,因此raft协议设置了随机超时时间防止election时间过长。
log replication则规定日志数据的流向只是从leader到follower。leader将客户端请求封装到log entry中,复制到所有folower节点,每个节点按相同顺序应用请求,得到相同的结束状态。当leader把日志复制到大多数节点后即可向客户端提交成功消息。