多个应用服务只访问单个数据库

来源:6-5 实例1-DB-DB.链式事务管理器

mmmmM00

2019-07-15

老师,您好。我想问下分布式系统中多个应用服务只访问单个数据库,需不需要做分布式事务(例如订购商品整个流程,不同服务操作同一个数据库不同表,但需要订单表、账户表、商品库存表等数据一致)?需要的话解决方案跟访问多个数据源是否一致呢?

写回答

2回答

大漠风

2019-07-17

一般情况下,是不推荐这么做的。

首先,这种情况下的事务问题,实际上不是分布式事务的问题,因为一般说分布式事务,是说在使用多个数据库的时候,怎么保证对多个数据库的操作的事务性。即都完成或都不完成,而不会出现一个数据库中的操作完成了,另一个数据库中的操作失败回滚了。

对于你这种情况,多个系统使用同一个数据库,如果可能会出现多个系统同时修改同一个表的同一个记录,例如有一个商城系统和一个论坛系统,都有可能更新用户表的信息。那么就有可能出现两个系统同时更新用户表中的同一个用户记录。而这时,两个系统都有自己的事务管理,但是,实际上的事务管理是在数据库中实现的。其实,这种情况,在本质上跟一个系统启动了多个实例是一样的,就好像我为了高可用,启动了2个商城系统。

对于这种系统,可能出现的情况就是,两个系统同时要操作用户信息,这时商城系统先开启一个事务,然后要在事务中更新用户信息。而这时论坛系统也要更新用户,它也开启了一个事物。然后商城系统先完成并提交了事务,这时论坛系统再提交的时候,就会报错,提交就会失败。

2
1
mmmmM00
感谢? ,这么晚还在回复,辛苦了
2019-07-18
共1条回复

mmmmM00

提问者

2019-07-15

因为现在也有公司用Oracle,顶多采用主备读写分离分成两个数据库,不管怎样,写操作都在一个数据库中.

0
0

分布式事务实践,从原理到实例,解决数据一致性

掌握分布式事务实现技术,是架构师必备技能。

1149 学习 · 153 问题

查看课程