(二)深入理解分布式事务(1)

1、什么是分布式事务

2、分布式事务的产生的原因

数据库分库分表

应用SOA化

3、事务的ACID特性

4、分布式事务的应用场景 (支付,再现下单)

5、常见的分布式事务解决方案

基于XA协议的两阶段提交

消息事务+最终一致性

TCC编程模式

6.总结

1、什么是分布式事务

事务的参与者支持事务的服务器资源服务器以及事务管理器位于不同分布式系统不同节点之。大的操作由不同的小操作组成,小的操作不同的服务器上,要么全部成功,要么全部失败。保证不同数据库数据一致性

2、分布式事务的产生的原因

2.1、数据库分库分表

单表超过1000W分库分表多个。访问01和02库,用分布式事务保证一致性。

(二)深入理解分布式事务(1)_第1张图片

2.2、应用SOA化

业务的服务化。原单机现拆解,同时对订单和库存操作,涉及订单库库存库

(二)深入理解分布式事务(1)_第2张图片
以上两种情况表象不同,但是本质相同,都是因为要操作的数据库变多了!

3、事务的ACID特性

3.1、原子性(A)

要么全部完成,要么全部不做,没有中间状态。执行中错误,所有都被回滚,就像没执行。

3.2、一致性(C)

A有500元,B有300元,A给B 50元,不管并发多少,只要成功了,一定A 450,B 350

3.3、隔离性(I)

事务之间不会互相影响,中间状态不被其他事务感知。

3.4、持久性(D)

事务完成了保存库中,停电,系统宕机也是

4、分布式事务的应用场景 

4.1、支付:买家扣款,卖家账户加钱

4.2、下单:扣库存更新订单状态

5、常见的分布式事务解决方案

5.1、XA协议两阶段提交

分布式事务协议两部分:(1)事务管理器(负责本地资源提交和回滚)  (2)本地资源管理器(DB实现了XA接口)。

缺点:性能不理想无法满足高并发。mysql的XA实现,没有记录prepare阶段日志,主备切换不一致。许多nosql也没有支持XA

(二)深入理解分布式事务(1)_第3张图片

5.2、消息事务+最终一致性

基于消息中间件的两阶段提交,将本地事务发消息放一个分布式事务,本地成功且对外发消息成功,要么都失败,RocketMQ支持

(二)深入理解分布式事务(1)_第4张图片

1、A系统向消息中间件发送预备消息

2、消息中间件保存预备消息并返回成功

3、A执行本地事务

4、A发送提交消息给消息中间件

步骤一、二出错,整个事务失败,不会执行A的本地操作

三出错,回滚预备消息,怎么回滚?A系统实现消息中间件回调接口,消息中间件不断执行回调接口检查A是否成功,失败则回滚预备消息

四出错,A事务成功,通过回调接口,中间件检查A成功,不需要发消息,消息中间件提交消息,完成事务

两阶段提交用在高并发,拆成消息事务A系统本地操作+发消息)+B本地操作,B系统操作由消息驱动,消息事务成功A一定成功,B会收到消息执行本地操作,失败消息会重投,直到成功

(二)深入理解分布式事务(1)_第5张图片

5.3、TCC编程模式

两阶段变种。Try、Confirm和Cancel。下单:Try扣库存Confirm更新订单状态失败Cancel恢复库存。通过代码人为实现两阶段

6、总结

对多数据库事务统一控制,按控制力度分为:

不控制:不引入分布式事务,

部分控制:变种两阶段提交,消息事务+最终一致性、TCC模式。并发量和性能很好,一致性减弱

完全控制:完全实现两阶段提交。牺牲性能,保障一致

你可能感兴趣的:((二)深入理解分布式事务(1))