这是我参与「第五届青训营 」伴学笔记创作活动的第17天
分布式事务
二阶段提交
为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种算法
引入了协调者和参与者,相互进行网络通信
出现的结果
- 协调者不宕机,参与者宕机:需要进行回滚操作
- 协调者宕机,参与者不宕机:可以起新的协调者,待查询状态后重复二阶段提交
- 协调者和参与者都宕机:无法确认状态,需要数据库管理员介入,防止数据库进入一个不一致的状态
注意
- 性能问题:两阶段提交需要多次节点的网络通信,耗时过大,资源需要进行锁定徒增资源等待时间
- 协调者单点故障问题:如果事务协调者节点宕机,需要另起新的协调者,否则参与者处于中间状态无法完成事务
- 网络分区带来的数据不一致:一部分参与者收到了提交消息,另一部分参与者没收到commit消息,会导致节点之间数据不一致
三阶段提交
优点
- 解决了单点故障问题
- 解决了阻塞问题
- 引入了超时机制,在等到超时之后会继续进行事务的提交
MVCC
MVCC是一种并发控制的方法,维持一个数据的多个版本使读写操作没有冲突。所以既不会阻塞写也不会阻塞读,为每个修改保存一个版本,该版本和事务的时间戳相关联,既可以提高并发性能也可以解决脏读问题
共识协议
Quorum NWR模型
- N: 在分布式存储系统中有多少份备份数据
- W: 代表一次成功的更新操作要求至少有W份数据写入成功
- R: 代表一次成功的读数据操作要求至少有R份数据读取成功
为了保证强一致性需要保证W+R>N