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