分布式事务

首先理解事务,提供一种“要么什么都不做,要么做全套(All or Nothing)”的机制,她有ACID四大特性(原子性,一致性,隔离性,持久性)

 

1 分布式事务

分布式事务顾名思义就是要在分布式系统中实现事务,它其实是由多个本地事务组合而成。

对于分布式事务而言几乎满足不了 ACID,其实对于单机事务而言大部分情况下也没有满足 ACID,不然怎么会有四种隔离级别呢?所以更别说分布在不同数据库或者不同应用上的分布式事务了。

流程图:

 

 

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

2.1 基于XA协议的两阶段提交

XA是一个分布式事务协议,由Tuxedo提出。XA中大致分为两部分:事务管理器本地资源管理器。其中本地资源管理器往往由数据库实现,比如Oracle、DB2这些商业数据库都实现了XA接口,而事务管理器作为全局的调度者,负责各个本地资源的提交和回滚。 

 

 

总的来说,XA协议比较简单,而且一旦商业数据库实现了XA协议,使用分布式事务的成本也比较低。但是,XA也有致命的缺点,那就是性能不理想,特别是在交易下单链路,往往并发量很高,XA无法满足高并发场景。XA目前在商业数据库支持的比较理想,在mysql数据库中支持的不太理想,mysql的XA实现,没有记录prepare阶段日志,主备切换回导致主库与备库数据不一致。许多nosql也没有支持XA,这让XA的应用场景变得非常狭隘。

https://edu.51cto.com/center/course/lesson/index?id=430340

 

2.2 消息事务+最终一致性

当事务的发起方(事务参与者,消息发送者)执行完本地事务后,同时发出一条消息,事务参与方(事务参与者,消息的消费者)一定能够接受消息并可以成功处理自己的事务。

 

 

 强调两点:

  1. 可靠消息:发起方一定得把消息传递到消费者。

  2. 最终一致性:最终发起方的业务处理和消费方的业务处理得完成,达成最终一致。

 

资源:

https://www.cnblogs.com/Daniel-Leung/p/fenbushishiwu20210825230930.html

 

posted @ 2022-11-22 21:47  NingShare  阅读(40)  评论(0编辑  收藏  举报