前言
总体来说,分布式事务解决方案可分为强一致性分布式事务解决方案和最终一致性分布式事务解决方案
本篇主要介绍强一致性分布式事务解决方案:DTP模型、2PC模型、3PC模型
概述
致性分布式事务解决方案主要包括DTP模型(全局事务模型)、2PC模型(两阶段提交)、3PC模型(三阶段提交),其中基于DTP模型,典型的解决方案时分布式通信协议XA规范。
优点
- 数据一致性比较高
- 在任意时刻都能够查询到最新写入的数据
缺点
- 存在性能我呢提
- 实现复杂
- 牺牲了可用性
- 不适合高并发场景(锁资源)
DTP模型
DTP模型一套分布式事务标准,具体实现交给厂商来实现。
定了几个重要概念:事务、全局事务、分支事务和控制线程
核心组件:AP应用程序、TM事务管理器和RM资源管理器,TM控制全局事务,RM管理实际资源
- 事务:一个完整的工作单元,具备ACID
- 全局事务:事务管理器管理的事务
- 分支事务:由事务管理器管理的事务中,每个资源管理器中独立执行的事务。
- 控制线程:执行全局事务的线程,用来关联应用程序、事务管理器和资源管理器
2PC模型
2PC指的是两个阶段 ,P指Prepare即准备,C指 Commit 即提交。
两阶段执行流程
1、Prepare 阶段
在Prepare阶段,事务管理器给每个参与全局事务的资源管理器发送Prepare消息,资源管理器要么返回失败,要么在本地执行相应事务,将事务写入本地的Redo Log和 Undo Log中,并返回处理状态。此时==事务没有提交
==
2、Commit阶段
如果事务管理器收到了参与全局事务的资源管理返回的失败消息,则直接给Prepare阶段执行成功的资源管理器发送回滚消息,否则,向每个资源管理器发送Commit消息。资源管理器执行事务回滚或提交操作,释放锁资源。
2PC模型存在问题
1、同步阻塞:事务执行过程中所以事务节点都会对其占用公共资源加锁
2、单点故障
3、事务不一致问题:Commit阶段,网络或部分资源管理器故障,导致没有接收到Commit消息。
4、无法解决问题:事务管理器在Commit后宕机,唯一接受这条Commit消息的资源管理器也宕机,则无法确认事务是否提交
3PC模型
3PC模型把2PC模型中的Prepare阶段一分为二,最终形成3个阶段:CanCommit阶段、PreCommit阶段、和doCommit或者doRollback阶段。
执行流程
CanCommit阶段
事务管理其向参与全局事务的资源管理器发送CanCommit消息,资源管理收到CanCommit消息后,如果认证能够执行事务,会向事务管理器相应YES,进入预备状态,否则No状态
PreCommit阶段
收到Yes: 事务管理其向参与全局事务的资源管理器发送PreCommit消息,资源管理收到PreCommit消息后,执行事务操作,将Undo 和 Redo 信息写入事务日志,并向事务管理器响应Ack状态,此时不会提交事务。
收到No: 在事务执行失败的PreCommit阶段,事务管理器会向全局事务的资源管理器发送Abort消息,资源管理器收到Abort消息或者期间出现超时,都会中断事务执行。
doCommit 或者doRollback阶段
在事务执行成功的doCommit 阶段,事务管理器会向全局事务的资源管理器发送doCommit 消息,资源管理器接收到消息后,正式提交事务,并释放资源,同时向事务管理器相应事务已提交状态。事务管理器收到响应的事务已提交的状态,完成事务的提交。
在事务执行失败的doRollback阶段,事务管理器会向全局事务的资源管理器发送doRollback消息,资源管理器接收到Rollback消息后,利用Undo Log日志信息回滚事务,并释放资源,同时向事务管理器相应事务已提交状态。事务管理器收到响应的事务已回滚的状态,完成事务的回滚。
存在问题
3PC对比2PC 解决了单点故障问题。
如果资源管理器无法及时收到来自事务管理器发出的消息,那么资源管理器就会执行提交事务操作,而不是一直持有事务的资源并处于阻塞状态, 但这样机制会导致数据不一致的问题。
又或者存在Abort消息的接收时间超出相应时间后,部分事务已提交。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/4805.html