一、什么是分布式事务?
传统的单库/单节点事务处理起来比较方便(如MySQL遵循ACID特性),而分布式事务指的是多个跨库/跨节点之间的事务,比较复杂。
举个例子,在分布式系统中,如果要在电商系统中实现一个下单支付功能,需要涉及多个事务操作:
- 库存服务:扣减库存
- 账户服务:扣减余额
- 订单服务:生成订单
分析:下单支付流程中涉及多个服务,如果其中一个流程失败了,那么整个流程都将出现问题,所以我们要通过分布式事务来支持,保证所有流程要么都执行,要么都不执行
二、分布式事务有哪些解决方案?
目前市面上主流的分布式事务有两种解决方案:
- 强一致性方案:基于XA协议实现,如Seata中的XA事务模型(根据CAP模型可知,保证了强一致性,就会牺牲可用性)
- 弱一致性发难:基于BASE理论,如TCC事务模型、Seata中的Saga事务模型(根据CAP模型可知,牺牲了强一致性,就会保证了可用性,适合并发高的场景)