1. 首页
  2. 编程面试题
  3. Java
  4. 分布式

哪些场景下都会产生分布式事务?



场景1:跨库事务

跨库事务指的是,一个应用某个功能需要操作多个库,不同的库中存储不同的业务数据。如下所示:

![Snipaste_20220423_213745.png](https://www.java1024.site:9000/shiti/2022/04/23/bc715726-27a6-4c55-893e-e23942045cda.png)

场景二:分库分表

通常一个库数据量比较大或者预期未来的数据量比较大,都会进行水平拆分,也就是分库分表。如下图,将数据库B拆分成了2个库:
![Snipaste_20220423_213756.png](2)

对于分库分表的情况,一般开发人员都会使用一些数据库中间件来降低sql操作的复杂性。

如,对于sql:insert into user(id,name) values (1,"tianshouzhi"),(2,"wangxiaoxiao")。这条sql是操作单库的语法,单库情况下,可以保证事务的一致性。

但是由于现在进行了分库分表,开发人员希望将1号记录插入分库1,2号记录插入分库2。所以数据库中间件要将其改写为2条sql,分别插入两个不同的分库,此时要保证两个库要不都成

功,要不都失败,因此基本上所有的数据库中间件都面临着分布式事务的问题。

场景三:跨服务事务

跨服务事务指的是,一个应用某个功能需要调用多个微服务进行实现,不同的微服务操作的是不同的数据库。如下所示:
![Snipaste_20220423_213806.png](https://www.java1024.site:9000/shiti/2022/04/23/ef1851bf-8658-4448-a1d2-9b4edebb79aa.png)

Service A完成某个功能需要直接操作数据库,同时需要调用Service B和Service C,而Service B又同时操作了2个数据库,Service C也操作了一个库。需要保证这些跨服务的对多个数据

库的操作要不都成功,要不都失败,实际上这可能是最典型的分布式事务场景。

发布者:admin,如若转载,请注明出处:https://ai1024.vip/26582.html

QR code
//