浅谈分布式一致性协议 | 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的的第17天
一、分布式系统面临的挑战
- 数据规模越来越大
- 服务的可用性要求越来越高
- 快速迭代的业务要求系统足够易用
1.1 理想的分布式系统
- 高性能:可拓展、低时延、高吞吐
- 正确:一致性、易于理解
- 可靠:容错、高可用
二、共识算法
2.1 什么是共识算法
- 简而言之介绍一个值一旦确定,所有人都认同。
2.2 什么是一致性
-
一致性是一种模型(或语义)
- 来约定一个分布式系统如何向外界(应用)提供服务
- KV中常见的一致性模型
- 最终一致性:读取可能暂时读取不到但是总会读到的
- 线性一致性:最严格,线性执行
-
一致性的分类
- 经常与应用本身有关
-
Linearizability是最理想的
2.3 共识协议不等于一致性
- 应用层面不同的一致性,都可以用共识协议来实现
- 比如可以故意返回旧的值
- 简单的复制协议也可以提供线性一致性 2.4 一般讨论共识协议时遇到的一致性,都指线性一致性
- 因为弱一致性往往可以使用相对简单的复制算法实现
三、Raft
- 2014年发表
- 易于理解作为算法的设计目标
- 使用了RSM、Log、RPC 的理念
- 直接使用RPC对算法进行了描述
- Strong Leader-based
- 使用了随机的方法减少约束
- 正确性
- 形式化验证
- 拥有大量成熟系统
3.1 复制状态机(RSM)
- RSM
- Raft中所有的consensus都是直接使用Log作为载体
- Commited Index
- 一旦Raft更新Commited Index,意味着这个Index前所有的Log都可以提交给状态机了
- Commited Index 是不持久化的,状态机也是volatile的,重启后从第一条Log开始