多个应用服务只访问单个数据库
来源:6-5 实例1-DB-DB.链式事务管理器

mmmmM00
2019-07-15
老师,您好。我想问下分布式系统中多个应用服务只访问单个数据库,需不需要做分布式事务(例如订购商品整个流程,不同服务操作同一个数据库不同表,但需要订单表、账户表、商品库存表等数据一致)?需要的话解决方案跟访问多个数据源是否一致呢?
写回答
2回答
-
大漠风
2019-07-17
一般情况下,是不推荐这么做的。
首先,这种情况下的事务问题,实际上不是分布式事务的问题,因为一般说分布式事务,是说在使用多个数据库的时候,怎么保证对多个数据库的操作的事务性。即都完成或都不完成,而不会出现一个数据库中的操作完成了,另一个数据库中的操作失败回滚了。
对于你这种情况,多个系统使用同一个数据库,如果可能会出现多个系统同时修改同一个表的同一个记录,例如有一个商城系统和一个论坛系统,都有可能更新用户表的信息。那么就有可能出现两个系统同时更新用户表中的同一个用户记录。而这时,两个系统都有自己的事务管理,但是,实际上的事务管理是在数据库中实现的。其实,这种情况,在本质上跟一个系统启动了多个实例是一样的,就好像我为了高可用,启动了2个商城系统。
对于这种系统,可能出现的情况就是,两个系统同时要操作用户信息,这时商城系统先开启一个事务,然后要在事务中更新用户信息。而这时论坛系统也要更新用户,它也开启了一个事物。然后商城系统先完成并提交了事务,这时论坛系统再提交的时候,就会报错,提交就会失败。
212019-07-18 -
mmmmM00
提问者
2019-07-15
因为现在也有公司用Oracle,顶多采用主备读写分离分成两个数据库,不管怎样,写操作都在一个数据库中.
00
相似问题
拆分微服务后多表连接查询如何处理?
回答 1
JTA 只适用于单个服务内吗?
回答 2
如何实现提交数据库事务之后,再发送mq
回答 1
关于消息驱动架构在实际项目的应用
回答 1
分布式事务的理解
回答 1