为了构建容错系统,需要构建一套通用抽象机制来做对应的保证,例如事务的概念有原子性,隔离性,持久性。
分布式系统中共识也是重要的抽象之一,让所有的节点就某一项协议达成一致。
一致性
可线性化
也称原子一致性和强一致性。其基本的思想是让一个系统看起来好像只有一个数据副本,这样某个客户端成功提交了一个写请求后,其它的读请求可以立即看到这个词,而不是一个过期的缓存值。
主从复制的系统需要确保只要一个主节点,否则会出现脑裂现象。常见的方法是获取锁,每个节点都会去获取锁,但只有一个节点可以获取锁。
两阶段提交
2PC 是分布式数据库中的经典算法之一。2PC 引入了协调者的概念,协调者来跟踪所有参与者的回应,一般用共享库来作为协调者。
处理过程:
- 协调者会产生一个全局唯一事务id
- 每个参与节点进行各自单节点的事务处理,如果该过程有问题,协调者和其它参与者可以安全停止
- 当准备提交时,协调者会通知参与,如果这时失败或超时,则所有参与者都放弃
- 一旦协调者收到参与者的“是”或“否”,就会将决定写入日志,那么就算失败也要不断的重试,直到成功为止
如果协调者崩溃了,那么没有其他办法(理论上可以节点之间通信,这不属于2PC范围了),只能等协调者自身恢复。