第九章 一致性与共识
最后更新于:2022-04-02 04:18:44
[TOC]
## 一致性与共识
分布式系统最重要的抽象之一就是**共识(consensus)**:**就是让所有的节点对某件事达成一致**
## 一致性保证
大多数复制的数据库至少提供了**最终一致性**,这意味着如果你停止向数据库写入数据并等待一段不确定的时间,那么最终所有的读取请求都会返回相同的值。换句话说,不一致性是暂时的,最终会自行解决(假设网络中的任何故障最终都会被修复)。最终一致性的一个更好的名字可能是**收敛(convergence)**,因为我们预计所有的复本最终会收敛到相同的值
**分布式一致性模型**和我们之前讨论的事务隔离级别的层次结构有一些相似之处。尽管两者有一部分内容重叠,但它们大多是无关的问题:事务隔离主要是为了,**避免由于同时执行事务而导致的竞争状态**,而分布式一致性主要关于,**面对延迟和故障时,如何协调副本间的状态。**
## 线性一致性
是让一个系统看起来好像只有一个数据副本,而且所有的操作都是原子性的。有了这个保证,即使实际中可能有多个副本,应用也不需要担心它们
## 依赖线性一致性
1. 锁定和领导选举
2. 约束和唯一性保证
3. 跨信道的时序依赖
## 实现线性一致的系统
1. 单主复制(可能线性一致)
2. 共识算法(线性一致)
3. 多主复制(非线性一致)
4. 无主复制(也许不是线性一致的)
## CAP定理
* 如果应用需要线性一致性,且某些副本因为网络问题与其他副本断开连接,那么这些副本掉线时不能处理请求。请求必须等到网络问题解决,或直接返回错误。(无论哪种方式,服务都**不可用(unavailable)**)。
* 如果应用不需要线性一致性,那么某个副本即使与其他副本断开连接,也可以独立处理请求(例如多主复制)。在这种情况下,应用可以在网络问题前保持可用,但其行为不是线性一致的
';