看到一个分布式事务贴有惑,欢迎大家一起探讨

2020-10-20 09:03:54 +08:00
 ppyzzz

如果设计上应该尽量规避分布式事务的话,那么有这样一个问题: 电商下单扣款需要调用用户中心的余额扣减接口进行扣钱,那么如果不做分布式事务的话要怎么弄.或者这个流程的话怎么改变能够实现规避分布式事务达到电商下单的这个结果呢? 如果说接口按照最大粒度划分,意思是在电商模块直接操作用户余额库,使之在一个方法里面解决? 以上是观贴所惑,期待各位老哥一起讨论

1320 次点击
所在节点    问与答
2 条回复
Xbluer
2020-10-20 09:17:17 +08:00
关键词 saga
sujin190
2020-10-20 11:05:37 +08:00
这个问题在于,在复杂系统中虽然分布式事务无法避免,但是更多情况应该是独立流程更稳定而不是用分布式事务,而且独立流程耦合度更低、重入更容易、解决异常也会更简单更快

比如你上面提到电商下单扣款的问题,实际上这是两个流程,第一个是用户下单,第二是用户付款,用户下单应该由订单中心完成,但是余额扣款应该统一和支付中心来封装成统一的支付过程来完成,支付流水单和余额应该在同一个库中,剩下就是微信支付宝怎么走付款流程流程,这个也应该怎么走

分布式事务一旦出异常很多时候是未知且难以追溯的,要想尽可能降低出异常的概率就要求更稳定环境和协议复杂度,对于相对独立小流程拆解显然可以降低对环境的依赖,出异常可能更高但是出的异常大多都是可预期的,从外部系统补偿解决相对简单很多

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/716562

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX