侧边栏壁纸
博主头像
再见理想博主等级

只争朝夕,不负韶华

  • 累计撰写 112 篇文章
  • 累计创建 64 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

分布式事务-两阶段提交

再见理想
2022-05-27 / 0 评论 / 0 点赞 / 347 阅读 / 641 字

两阶段提交(2PC)

2PC,即二阶段提交(强一致性事务),是分布式事务中一个很重要的协议,当一个事务跨越多个节点时,为了保持事务的ACID特性,需要引入一个coordinator,即协调者作为的组件来统一掌控所有节点(称作参与者)的操作结果并最终指示这些节点是否要把操作结果进行真正的提交或回滚。

二阶段提交的算法思路可以概括为: 参与者将操作成败通知协调者,再由协调者根据所有参与者的反馈情报决定各参与者是否要提交操作还是回滚操作。

准备阶段

协调者询问参与者事务是否执行成功,参与者发回事务执行结果。

提交阶段

如果事务在每个参与者上都执行成功,事务协调者发送通知让参与者提交事务;否则,协调者发送通知让参与者回滚事务。需要注意的是,在准备阶段,参与者执行了事务,但是还未提交。只有在提交阶段接收到协调者发来的通知后,才进行提交或者回滚。

存在的问题

同步阻塞:资源锁需要等到两个阶段结束才释放,性能较差。所有事务参与者在等待其它参与者响应的时候都处于同步阻塞状态,无法进行其它操作。

单点问题:协调者在 2PC 中起到非常大的作用,发生故障将会造成很大影响。特别是在阶段二发生故障,所有参与者会一直等待状态,无法完成其它操作。

数据不一致:在阶段二,如果协调者只发送了部分 Commit 消息,此时网络发生异常,那么只有部分参与者接收到 Commit 消息,也就是说只有部分参与者提交了事务,使得系统数据不一致。

太过保守:任意一个节点失败就会导致整个事务失败,没有完善的容错机制。

⑤需要本地数据库支持XA协议。

文章参考

文章:分布式事务 两阶段提交、三阶段提交和TCC框架

0

评论区