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