赞
踩
事务是一系列数据库操作的原子性集合,具备ACID四大特性。
其中事务有分为本地事务和分布式事务。本地事务只能保证单个设备上的ACID特性,无法实现分布式系统中的事务管理,所以提出了分布式服务。
常见的分布式事务的解决方案有:seata,消息队列,saga,XA
大多数分布式事务采用的都是两段式(2PC)提交(3PC难以实现),包含Prepare阶段和Commit阶段,其中Commit阶段又分为正常提交事务和回滚事务两种情形。
若协调者从所有参与者那里都及时收到了YES响应,则会在Commit阶段正常提交事务,此时的流程如下:
若协调者没有从所有参与者那里都及时收到YES响应,如接收到了NO响应或没有及时收到某个参与者响应,则会在Commit阶段回滚事务,此时的流程如下:
分布式系统无法同时满足以下三个指标:
BASE理论是对CAP的一种解决思路,包含三个思想:
分布式事务最大的问题是各个子事务的一致性问题,借鉴CAP定理和BASE理论,可以采用如下两个模式(方案):
TC为单独部署的服务端,TM和RM为嵌入到应用中的客户端
@GlobalTransactional
来开启分布式事务)@GlobalTransactional
注解的三个属性@GlobalTransactional
后还有必要使用@Transactional
吗(看到某方法上同时使用了这两个注解,就提出了这个问题。以下是来自通义千问的回答)
在某些特定情况下,虽然开启了全局事务,但在具体的服务或DAO层方法中,仍可能需要对局部逻辑有更细粒度的事务控制要求。这种情况下,可以在全局事务内部的方法上适当使用@Transactional,但这不是必须的,而且要根据具体的业务逻辑和事务边界来决定。在实践中,应尽量避免不必要的重叠,确保事务管理的清晰性和简洁性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。