千锋大数据开发学院 Boot整合分布式事务简介,SpringBoot2.x教程——Spring

一.分布式事务简介
1.什么是分布式事务
百度百科对分布式事务的解释如下:
简单的说 , 就是一次大的操作由不同的小操作组成 , 这些小的操作分布在不同的服务器上 , 且属于不同的应用 。 分布式事务需要保证这些小操作要么全部成功 , 要么全部失败 。 本质上来说 , 分布式事务就是为了保证不同数据库的数据一致性 。
2.分布式事务产生的原因
2.1数据库分库分表
千锋大数据开发学院 Boot整合分布式事务简介,SpringBoot2.x教程——Spring
文章图片
2.2应用SOA化
【千锋大数据开发学院 Boot整合分布式事务简介,SpringBoot2.x教程——Spring】所谓的SOA , 就是业务的服务化 。 比如原来单机支撑了整个电商网站 , 现在对整个网站进行拆解 , 分离出了订单中心、库存中心 。 对于订单中心 , 有专门的数据库存储订单信息 , 库存中心也会有专门的数据库存储库存信息 。 这时候如果要同时对订单和库存进行操作 , 那么就会涉及到订单数据库和库存数据库 , 为了保证数据一致性 , 就需要用到分布式事务 。
千锋大数据开发学院 Boot整合分布式事务简介,SpringBoot2.x教程——Spring
文章图片
以上两种情况表象不同 , 但是本质相同 , 都是因为要操作的数据库变多了!
3.分布式事务的应用场景
3.1支付
我们在进行支付的时候 , 会对买家账户进行扣款 , 同时对卖家账户进行加钱 。 这些操作必须在一个事务里执行 , 要么全部成功 , 要么全部失败 。 而对于买家账户属于买家中心 , 对应的是买家数据库 , 而卖家账户属于卖家中心 , 对应的是卖家数据库 , 对不同数据库的操作必然需要引入分布式事务 。
3.2在线下单
买家在电商平台下单 , 往往会涉及到两个动作 , 一个是扣库存 , 第二个是更新订单状态 , 库存和订单一般属于不同的数据库 , 需要使用分布式事务保证数据一致性 。
二.XA事务
1.XA协议
2.XA协议构成
XA事务允许不同数据库的分布式事务 , Oracle、MySQL和SQLServer都支持XA事务 。
3.XA事务构成
XA事务由一个或多个资源管理器(RM)、一个事务管理器(TM)和一个应用程序(ApplicationProgram)组成 。 资源管理器:提供访问事务资源的方法 , 通常一个数据库就是一个资源管理器 。 事务管理器:协调参与全局事务中的各个事务 , 需要和参与全局事务的所有资源管理器进行通信 。 应用程序:定义事务的边界 。
4.XA事务注意事项
三.常见的分布式事务解决方案
1.基于XA协议的两阶段提交(2PC)
千锋大数据开发学院 Boot整合分布式事务简介,SpringBoot2.x教程——Spring
文章图片
XA实现分布式事务的原理如下:
千锋大数据开发学院 Boot整合分布式事务简介,SpringBoot2.x教程——Spring
文章图片
总的来说 , XA协议比较简单 , 而且一旦商业数据库实现了XA协议 , 使用分布式事务的成本也比较低 。
XA两阶段提交的不足1.性能问题XA协议遵循强一致性 。 在事务执行过程中 , 各个节点占用着数据库资源 , 只有当所有节点准备完毕 , 事务协调者才会通知提交 , 参与者提交后释放资源 。 这样的过程有着非常明显的性能问题 。 2.协调者单点故障问题事务协调者是整个XA模型的核心 , 一旦事务协调者节点挂掉 , 参与者收不到提交或是回滚通知 , 参与者会一直处于中间状态无法完成事务 。 3.丢失消息导致的不一致问题在XA协议的第二个阶段 , 如果发生局部网络问题 , 一部分事务参与者收到了提交消息 , 另一部分事务参与者没收到提交消息 , 那么就导致了节点之间数据的不一致 。
总结:优点:尽量保证了数据的强一致 , 适合对数据强一致要求很高的关键领域(其实也不能100%保证强一致)缺点:实现复杂 , 牺牲了可用性 , 对性能影响较大 , 不适合高并发高性能场景 , 如果分布式系统跨接口调用 。


推荐阅读