基于Spring Cloud的两阶段提交分布式事务框架

本文探讨了在分布式事务中,TCC和可靠消息方案的局限性,提出了基于Spring Cloud的两阶段提交(TPC)事务框架。通过案例分析和性能测试,展示了一个简单、低侵入性的TPC实现,以及其实现原理和潜在的优化方向。
摘要由CSDN通过智能技术生成

缘起

现在用的比较多的分布式事务方案主要有TCC和可靠消息。TCC需要对业务进行改造,分别实现try/confirm/cancel方法,侵入性太强,工作量大。而可靠消息主要适合可以异步调用的业务,对于需要跨服务同步调用的业务,实现困难。以订机票为例,从深圳->新疆乌鲁木齐,假设没有直达,第一步先要确定中转地,选择一家航空公司订票,假设这步的订票结果是成功调用南航的服务订到了深圳->西安,那第二步调用就要根据第一步的结果订第二张票,比如优先选择同一家航空公司,间隔时间要大于两小时,出发地要限制在西安。如果第二步订票失败,那么第一步订的票也需要回滚。像这种存在上下文逻辑关系的跨服务调用,用消息同步方案很难处理。

所以需要一个好的支持跨服务调用的分布式方案。

理想实现

1) 简洁明了,最好和普通的无事务或一阶段事务的远程调用相接近

2) 侵入性小,尽量不要因为引进分布式事务引起业务代码结构的明显变化

3) 危险期短

4) 性能损失少

现实情况

TCC方案满足条件3,4,条件1勉强,不满足条件2。

Atomikos方案貌似也比较流行,但有很多限制。比较奇怪的是网上的例子基本上是用Atomikos实现基于XA的单例多数据源的事务控制,看不到跨服务调用的例子。官方倒是提供了各种场景的使用例子,看了后,我猜到了原因:官方的例子很不清爽,而且高性能方案要收费。我在测试的时候发现免费版限制了50个事务/每秒,就直接放弃了对它的进一步研究。

我最满意的方案是阿里的GTS,它是基于XA的两阶段提交,使用时只要一个注解和

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值