这是我参与「第四届青训营 」笔记创作活动的的第15天
分布式系统面临的挑战
- 数据规模越来越大
- 服务的可用性要求越来越高
- 快速迭代的业务要求系统足够易用
CAP实际情况
CAP理论证明,任何分布式系统只可同时满足二点,没法三者兼顾。
| 选 择 | 说 明 |
|---|---|
| CA | 放弃分区容错性,加强一致性和可用性,其实就是传统的单机数据库的选择 |
| AP | 放弃一致性(这里说的一致性是强一致性),追求分区容错性和可用性,这是很多分布式系统设计时的选择,例如很多NoSQL系统就是如此 |
| CP | 放弃可用性,追求一致性和分区容错性,基本不会选择,网络问题会直接让整个系统不可用 |
一致性与共识算法
一致性的含义
-
一致性是一种模型(或语义),来约定一个分布式系统如何向外界(应用)提供服务。比如Client客户端想读取分布式机器最近写入的值,那么就需要这种一致性需要。
-
KV中常见的一致性模型分类:
- 最终一致性(读取可能暂时读不到但是总会读到)
- 线性一致性(最严格,线性执行)。Linearizability是最理想的。
共识算法
- 在分布式系统中让所有节点达成共识达到数据一致性。
- 在分布式系统中错误总是发生,比如网络断开、分区、缓慢、重传、乱序CPU、IO等都机会停住,因此共识算法可以达到容错(falute-tolerance),使系统整体不会因为个别机器宕机而全盘崩溃。
- 共识协议不等于一致性:
- 应用层面不同的一致性,都可以用共识协议来实现,比如可以故意返回旧的值。
- 简单的复制协议也可以提供线性一致性。
- 一般讨论共识协议时提到的一致性,都指线性一致性,因为弱一致性往往可以使用相对简单的复制算法实现。
一致性协议案例: Raft
-
易于理解作为算法的设计目标
- 使用了RSM、Log、RPC的概念
- 直接使用RPC 对算法进行了描述
- Strong Leader-based
- 使用了随机的方法减少约束
-
正确性
- 形式化验证
- 拥有大量成熟系统
一致性协议的发展方向
- Raft Paxos相互移植
- 多数分布式系统都选择共识算法作为底座,不同的一致性协议有不同的特性。