关于分布式事务之2PC(两阶段提交)

概念:

2PC即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(commitphase),2是指两个阶段,P是指准备阶段,C是指提交阶段。

运行过程

  1. 准备阶段:事务协调者询问参与者事务是否执行成功,参与者返回事务执行结果,此时事务并未提交。

  2. 提交阶段:若所有参与者事务都执行成功,则事务协调者通知参与者事务提交事务;否则,事务协调者通知参与者回滚事务。

在这里插入图片描述
XA接口规范协议
XA接口规范协议是一个分布式事务协议,它的基础是两阶段提交协议(2PC)。
XA中大致分为两部分:事务管理器和本地资源管理器。
本地资源管理器往往由数据库实现,几乎所有商业OLTP(联机事务处理)数据库都支持XA协议,实现了XA接口。

  1. 本地资源管理器往往由数据库实现,几乎所有商业OLTP(联机事务处理)数据库都支持XA协议,实现了XA接口。

  2. 事务管理器(即事务协调者Coordinator)作为全局的调度者,负责各个本地资源的提交和回滚;事务管理器一般由应用框架实现,如Java的Atomikos TransactionsEssentials

举个例子:

老王的老婆要炒菜,叫老王去买锅,叫儿子去买菜。

在2PC实现的情况下

  1. 老王去超市拿了个锅,先打电话告诉老婆说有锅了,然后走到柜台,堵着收银员就不结账,也不让其他人先结账,说是在等老婆电话通知结账。
  2. 儿子去超市买了个菜,先打电话告诉老妈说有菜了,走到另一个柜台,堵着收银员也不结账,也不让其他人先结账,说是在等老妈电话通知结账。
  3. 如果老婆接到老王和儿子电话,确认锅和菜都有了,那么就通知两个人都结账,分布式事务成功,皆大欢喜。
  4. 如果老婆接到老王和儿子电话,发现锅和菜其中有一个买不到,那么菜炒不成了,就通知两个人都不要结账,东西哪里拿的就放回哪里,分布式事务失败,操作回滚。

在2PC中出现单点问题:

  1. 假设当前与理想情况下第1步相同。
  2. 假设当前与理想情况下第2步相同。
  3. 嘿嘿,此时隔离老李来串门,叫老王的老婆去他家吃饭,老王的老婆一口答应就去了,而且手机也不带,那么老王的老婆就没办法通知老王和儿子结账,老王和儿子就一直堵着收银台。

总结:

缺点:

  1. 同步阻塞:所有事务参与者在等待其他参与者响应的时候都处于同步阻塞的状态,无法进行其他操作,即资源锁定时间太长。
  2. 单点问题:协调者在2PC中起到非常大的作用,若发生故障将会造成严重影响。特别是在第二阶段发生故障,所有参与者会一直处于等待状态,无法进行其他操作。
  3. 一致性问题:在第二阶段,若协调者只发送了部分Commit消息,此时网络发生异常,那么只有部分事务参与者接收到Commit消息,也就是说只有部分参与者提交了事务,那么会使系统数据不一致。
  4. 容错问题:任意一个节点失败则会导致整个事务失败,容错机制较低。
  5. 可用性:牺牲了可用性,对性能影响较大,不适合高并发的场景。

优点:
使用分布式事务的成本较低。在一致性上选择了尽量向实时一致性靠拢。

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
分布式事务的两阶段提交(Two-Phase Commit,2PC)是一种常见的分布式事务协议,用于协调多个参与者节点的提交或回滚操作。它包括以下两个阶段: 1. 准备阶段(Prepare Phase):在准备阶段,协调者节点(也称为事务管理器)向所有参与者节点发送准备请求,并等待它们的响应。参与者节点接收到准备请求后,会执行事务的准备操作,检查是否能够成功执行事务。如果参与者节点准备就绪,它会向协调者节点发送“同意”响应,表示可以进行提交操作。如果有任何一个参与者节点无法准备就绪,它会向协调者节点发送“中止”响应,表示无法执行事务。 2. 提交阶段(Commit Phase):在提交阶段,如果所有参与者节点都发送了“同意”响应,协调者节点会向所有参与者节点发送提交请求,要求它们执行事务提交操作。参与者节点接收到提交请求后,会执行事务提交操作,并向协调者节点发送“完成”响应。如果有任何一个参与者节点无法执行提交操作,它会向协调者节点发送“中止”响应。 协调者节点在等待一定时间后,收集所有参与者节点的响应,如果收到了所有参与者节点的“完成”响应,它会向所有参与者节点发送“全局提交”指令,表示事务提交完成。如果协调者节点收到了任何一个参与者节点的“中止”响应或超时,它会向所有参与者节点发送“全局回滚”指令,表示事务的回滚。 两阶段提交协议保证了分布式事务的原子性和一致性,但它也存在一些缺点,比如协调者节点的单点故障、阻塞等待参与者节点响应导致性能问题等。因此,在实际应用中,还需要考虑其他的分布式事务解决方案来满足具体的业务需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值