本地事务实现分布式事务的可用情形

分布式事务想要达到完全一致性是非常难的, 就算实现了也会丧失分布式的性能.所以分布式事务的方案有多种, 具体要按情况来定, 来取舍.

有些情况, 或许可以尝试使用本地事务实现分布式事务
目前只想到一种:
前提条件, 只跨两个进程的事务, 而且一个事务可以放在另一个事务的末端
即业务需要满足:

TransactionalA(){
first()…
sencond()…
blabla
下面是调用的最后一个方法, 并且是进程间调用(对方也是一个事务)
TransactionalB();
}

分析下,
情况一: B之前失败, 没调用B, B当然正确
情况二: B之后失败, 但目前B之后是没有代码的, 不存在, 除非你切面进行了一些后置方法.如果这些后置方法失败A需要回滚的话, B肯定无法回滚, 但是可能性低
情况三: B失败了, A肯定不会认为B成功, 所以A可定也失败了, 都回滚
情况四: B成功了, A有可能任务他失败了, 比如调用超时, 这时A回滚, B无法回滚, 这个可能性也存在

所以即便满足了B是最后一个方法, 也存在情况二和情况四的不足, 尤其是情况四.

补充: TransactionalB(){}失败 如果A -> B之间 还有一定逻辑 , 要么在事务内, 要么有重试表, 失败重试,最终一致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值