为了构建容错系统,需要构建一套通用抽象机制来做对应的保证,例如事务的概念有原子性,隔离性,持久性。
分布式系统中共识也是重要的抽象之一,让所有的节点就某一项协议达成一致。

一致性

可线性化

也称原子一致性和强一致性。其基本的思想是让一个系统看起来好像只有一个数据副本,这样某个客户端成功提交了一个写请求后,其它的读请求可以立即看到这个词,而不是一个过期的缓存值。

主从复制的系统需要确保只要一个主节点,否则会出现脑裂现象。常见的方法是获取锁,每个节点都会去获取锁,但只有一个节点可以获取锁。

两阶段提交

image.png
2PC 是分布式数据库中的经典算法之一。2PC 引入了协调者的概念,协调者来跟踪所有参与者的回应,一般用共享库来作为协调者。

处理过程:

  1. 协调者会产生一个全局唯一事务id
  2. 每个参与节点进行各自单节点的事务处理,如果该过程有问题,协调者和其它参与者可以安全停止
  3. 当准备提交时,协调者会通知参与,如果这时失败或超时,则所有参与者都放弃
  4. 一旦协调者收到参与者的“是”或“否”,就会将决定写入日志,那么就算失败也要不断的重试,直到成功为止

如果协调者崩溃了,那么没有其他办法(理论上可以节点之间通信,这不属于2PC范围了),只能等协调者自身恢复。