二阶段提交的优缺点有哪些?

二阶段提交协议(Two-phase commit protocol),简称 2PC。

两阶段提交是一种强一致性事务协议,它分为准备阶段和提交阶段。

图片[1]-二阶段提交的优缺点有哪些?-不念博客

在准备阶段,协调者节点询问所有参与者是否准备好提交事务,如果所有参与者都答应准备好了,那么在提交阶段,协调者会通知所有参与者提交事务。

如果有任何一个参与者在准备阶段没有准备好,那么协调者会通知所有参与者回滚事务。

有熟悉 MySQL 的同学可能马上想到了,MySQL 的事务提交就是通过几种日志来实现二阶段提交的。

优点

  1. 原子性保证:2PC 协议可以保证所有参与者要么全部提交成功,要么全部失败回滚,从而实现跨多个分布式节点的事务的原子性。
  2. 简单直观:2PC 的设计思路简单,逻辑清晰,容易理解,这使得它在很多传统的数据库和分布式系统中得到了广泛的应用,比如 MySQL 从 5.5 版本开始支持。

缺点

  1. 同步阻塞:在 2PC 的第一阶段,所有参与者在响应协调者的准备请求后,必须等待最终的提交或回滚指令。这期间,所有参与者都处于阻塞状态,无法进行其他操作,导致资源锁定时间较长,在高并发场景下很明显不太适用。
  2. 单点故障:如果协调者在第二阶段崩溃,参与者可能会无限期地等待指令,因为它们不知道应该提交还是回滚。这使得整个系统容易受到单点故障的影响。
  3. 数据不一致:如果在第二阶段中协调者向某些参与者发送了提交指令,而其他参与者因为网络问题没有收到指令,那么这些没有收到指令的参与者可能会选择回滚,导致数据不一致。
  4. 复杂的恢复机制:当系统崩溃后,恢复过程非常复杂,所有参与者必须保持足够的信息以便在系统恢复后能够继续完成 2PC 协议。
© 版权声明
THE END
喜欢就支持一下吧
点赞125赞赏 分享
评论 抢沙发
头像
欢迎光临不念博客,留下您的想法和建议,祝您有愉快的一天~
提交
头像

昵称

取消
昵称

    暂无评论内容