跳到主要内容

分布式事务选型

随着用户增长,并发请求增加以及业务越来越复杂,架构设计往往不得不由单体向分布式系统演进,而分布式事务成了影响架构落地的首要难点。

不管是社区开源的ByteTCC、LCN,还是阿里的Seata,**开发者们从未停止在分布式事务上的努力**,也自然成为各大企业**面试必考点**:

> 分布式事务产生的场景?
>
> 常见的分布式事务解决方案?
>
> Saga分布式事务框架实现原理?
>
> SpringBoot如何整合Seata?

分布式事务具体应用场景,包括以下3个:A、服务内跨数据库的事务;B、跨内部服务的事务;C、跨外部服务的事务。

![图片](30A95983905951709A6A7FB956464E7A)

不同的应用场景需要适配不同的解决方案,无论是根据CAP定理还是BASE理论,我们知道,**无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性**。

如上图所示,分布式事务有多种解决方案。总得看来,很难做到有高一致性的同时,也有高性能,同时在实现上也有一定的难度。

我们做任何选择取舍都是平衡的艺术,在这里也给你提供一些**小建议**:

* 跟支付、交易打交道,优先 TCC;
* 大型系统,但要求不那么严格,考虑 消息事务 或 Saga 方案;
* 单体应用,建议 XA 两阶段提交就可以了;
* 最大努力通知方案建议都加上,毕竟不可能一出问题就交给开发排查,先重试几次看能不能成功。

具体到应用落地,