这是我参与「第四届青训营 」笔记创作活动的的第9天,学习了【浅谈分布式一致性协议】的内容,重点是分布式一致性的概念,raft算法,最后了解了共识算法未来的发展方向。
一致性&&共识算法
副本一致
满足案例2可靠 写简单起见:主副本、从副本模式;具体传输过程使用log
什么是一致性
定义:给定一系列操作,在约定协议的保障下,使得它们对处理结果达成“某种程度”的协同。
一致性是一种模型:定义了分布式系统如何向外提供服务。
一般分为如下两类:
线性一致性:最严格,始终可以读取
最终一致性:读取暂时不行,但最终可以
复制协议
问题:主副本失效后怎么处理
实现:共识算法
共识算法
定义:共识算法解决的是分布式系统对某个提案(Proposal),大部分节点达成一致意见的过程。\
- 论文指出共识算法是一个FLP问题,但在一定的代价下,工程上可以实现。
- 应用层的一致性可以用共识协议实现
拜占庭错误
伪造信息恶意响应的情况
Raft算法
概念
-
RSM(复制状态机)
commit index前所有log都可以提交给状态机 -
Term(逻辑时钟)
一朝天子一朝臣
角色
- leader
- follower
- candidate:请大家投票的状态,期望变成新leader
流程
日志复制
- commit index在各个节点上commit时间可能不一致
- 复制过程发送log+commit index
主节点失效
- 新leader,用新term
- raft通过log来判断是否投票,log不小就会投给对应的candidate
- 多数节点投票,就成新leader
冲突
全听leader,不管follower
paxos
老前辈、复杂
未来
us级别 共识、容错
HovercRaft:可编程交换机将RSM放到传输层
Mu:用RDMA
多节点提交
结点跨地域,会使RTT增大。希望能就近与leader通信。
案例:KV
- 单机
client RPC远程调用DB
实现get、put接口 - 主副本
两台DB - raft based
一致性读写
- 确定leadership
- 方案
优化写延迟:等所有commit log apply,再写状态机
优化读时延:读操作直接读状态机