分布式系统
参考资料
Raft
Raft 基本概念
- Leader:负责处理客户端请求,管理日志复制和提交
- Follower:被动接受 Leader 的指令,处理日志复制和提交
- Candidate:在选举过程中,Follower 可能会变成 Candidate
- 本地状态机:每个节点维护一个本地状态机,应用已提交的日志条目来更新状态
Raft 读写
- 写:客户端发送写请求到 Leader,Leader 将请求作为日志条目追加到日志中,并将日志条目复制到 Followers。当大多数节点确认日志条目后,Leader 将其提交并应用到状态机
- 读:客户端发送读请求到 Leader,Leader 可以直接从本地状态机读取数据并返回给客户端,或者通过日志复制机制确保读请求在最新的状态下被处理
- 只读 Leader, 需要保证 Leader 不是过时的,通常通过心跳机制和选举过程来确保
- 写一条空日志条目,确保 Leader 的日志是最新的
- 想让 Follower 处理读请求,必须使用租约机制
- Follower 的 commitIndex 不落后于 readindex
- 租约有效
Raft 强一致性
- 只写 Leader
- 新的 Leader 必须包含所有已提交的日志条目 (请求投票时带上 Term 与 Index)
- Leader 死掉后, 会进行选举
- 每个 Follower 的超时器随机设置,避免同时发起选举
- Candidate 收到大多数节点的投票后成为新的 Leader
- 脑裂, 参考 Term 决定 Leader 的合法性
其他
- 快照加日志
- 只能提交当前 Term 的日志
- 每次只增加或删除一个节点
分布式协调
CAP
- 分布式系统中, 一致性 (C), 可用性 (A), 分区容错性 (P) 三者不能同时满足, 只能满足其中的两个
高可用
延时与吞吐量
- 延时: 系统处理请求的时间, 不可能为 0
- 吞吐量: 系统在单位时间内处理请求的数量, 可能为无限
- 单线程时, 延时 = 处理时间, 吞吐量 = 1 / 处理时间