raft功能分析
2022-01-25 19:42:11 25 举报
AI智能生成
raft功能分析
作者其他创作
大纲/内容
日志压缩
快照技术
服务器独立创建快照
AppendEntries 一致性检查
删除last included index之前条目
leader发送快照给一些落后的follower
对于运行缓慢的follower
对于新加入的follower
写入快照
写时复制
创建快照
日志超过某大小
follower
快照包含接收者日志中没有的信息
follower 丢弃所有日志
接收到的快照是自己日志的前面部分
快照包含的条目全部删除
保留缺失的条目
替代方案
LSM树(日志清理或日志结构合并树)
选择一个积累了大量已经被删除或者被覆盖的对象的数据区域
重写该区域还活着的对象
释放该区域
leader选举
触发leader选举:心跳
选举过程
follower
增加自己任期号,并转换到candidate状态
然后投票给自己并且并行地向集群中的其他服务器节点发送 RequestVote RPC
结束状态条件
a:赢得选举(收到过半的投票)
一个follower投一票,先来先服务
b:其他的服务器节点成为 leader
收到AppendEntries RPC
c:一段时间之后没有任何获胜者
所有候选人超时
增加当前任期号
进入新选举
防止选票瓜分算法
随机选择选举超时时间
等级系统
日志复制
客户端请求包含指令,发送给leader
leader
指令追加到日志
并行发起 AppendEntries RPC 给其他的服务器
a:follower崩溃,丢包
leader不断重发,直到所有follower存储了所有日志条目
状态机处理该条目
a:日志条目被复制到过半服务器上
执行结果返回客户端
一致性
找到两者达成一致的索引最大日志条目,不一样的日志条目就删除
初始化follower的nextindex
AppendEntries RPC 中的一致性检查
follower拒绝
leader减小nextIndex值
重试RPC检查
检查无误(日志达成一致)
删除冲突日志条目
追加
优化一致性检查
安全性
选举限制
RPC包含日志信息
投票者比对
提交之前任期内的日志条目
follower和candidate崩溃
不断重发
定时和可用性
成员变更
客户端交互
支持线性化语义
客户端每条指令赋予唯一序列号
Subtopic
日志
日志条目
状态机指令
leader收到指令时的任期号
整数索引值
日志条目
状态机指令
leader收到指令时的任期号
整数索引值
快照
the last included index
the last included term
满足一项结束follower状态
0 条评论
下一页