前言
在前面我们说到跨网络完成事务就会产生事务,这一节我们看一下分布式事务产生的场景。
一、分布式事务产生的场景
分布式系统是从单体系统演变过来的,我们要理解分布式事务产生的场景,需要从单体应用进行理解。
说明:
(1)Web-Server中的服务都是在一个项目中,此时只有一个数据库。
(2)Web-Server集群的时候,每一个Web-Server都有每个服务,属于同进程调用。
(3)数据库只有一个,Web-Server获取的数据库的连接也就是由同一个数据库处理的,满足本地事务的基本要求,能够满足事务的四大特性。
这时候随着业务的发展,我们会将数据库和服务进行拆分。
1.1 数据库拆分:单体系统访问多个数据库实例
随着用户增多,数据库压力越来越大,此时我们会进行数据库的拆分,怎么拆分呐?比如:拆分成用户数据库、商品数据库、订单数据库。
说明:此时数据库由原先的单库,被拆分成3个数据库。
此时:单体系统需要访问多个数据库时就会产生分布式事务。
产生原因:由于数据分布在不同的数据库实例,需要通过不同的数据库连接去操作数据,此时就会产生分布式事务。
简单理解:跨数据库实例产生分布式事务。
1.2 服务拆分:多服务访问同一个数据库实例
随着模块越来越多,项目越来越庞大,我们会将模块拆分成不同的项目,那么两个服务需要跨网络远程调用,两个服务持有了不同的数据库连接进行数据库操作,此时就会产生分布式事务。
1.3 服务+数据库拆分:微服务架构
随着项目的发展,到了后期,我们就会一个服务一个数据库,比如:用户服务对应一个用户数据库,商品服务对应一个商品数据库,订单服务对应一个订单数据库,这就是微服务的产生,微服务之间通过远程调用完成事务操作,这就产生了分布式事务。
简单理解:跨网络远程调用产生分布式事务。
二、小结
通过上面分析,有两种情况会产生分布式事务:
(1)跨网络远程调用完成事务协作,就会产生分布式事务。
(2)跨数据库实例完成事务协作,就会产生分布式事务。
我们可以在进一步分析,上面这两种情况有一个共性就是在一个事务中,数据库的连接是不一样的,所以简单理解就是:一个事务中,当操作使用了不同的数据库连接就会产生分布式事务。