分布式事务的理解
来源:6-1 分布式事务介绍

慕仙4974986
2019-01-05
首先有两个节点,这两个节点的代码是一样的,都加了本地事务
这个代码段的逻辑思想是:
同一个数据库中,查寻一条数据的库存数量-5,在更新回数据库
现在有两个实例,实例A,查询出这条信息的时候,实例B,同时也查询出来了,
实例A,和实例B查询处理的数据是一样的,这时候就会出现问题,
按正常逻辑应该是-10的,结果发现数据库只-5,
我说的对吗?
为什么分布式事务必须是两个数据库才会产生?我想问的是,在分布式系统中,多实例的时候,操作同一段代码,就不会有数据一致性的问题吗?(先查询,后修改)
写回答
1回答
-
如果多个服务访问同一个数据库,这也是分布式系统,是最简单的多实例部署的方式。对于你说的情况,两个方法同时执行,读到了同一条数据,修改后保存。当第二个事务执行完提交的时候,应该会出错退出才对。
分布式事务,并不是说是两个数据的情况下才需要考虑。其实,广义上来讲,只要是对数据的操作,都应该考虑事务,例如从redis里面读写数据,从Mq里面读写消息,甚至从外部服务的接口上进行更新操作等。
如果是多实例部署,只有一个数据库的情况下,我们也需要考虑分布式事务,但是,这种情况下,由于数据库只有一个,数据库可以集中管理事务的问题,不管每个服务是怎么并发的,到了数据库那里,都一个实例的访问是没有区别的。
只有在多个数据库的情况下,我们才需要保证在跨数据库的时候,保证两个数据库的读写操作,能满足事务性,也就是要么都修改成功,要么都失败。而这,只是使用数据库本身的事务功能就无法满足了,需要在我们的应用系统中来设计。
012019-01-07
相似问题