本地事务异步恢复机制实现多数据源最终一致性

在传统关系型数据库的事务模型中必须遵守ACID原则,在单数据库业务下,ACID模型有效保障了数据的完整性,但是在大规模分布式环境下,一个业务往往会跨越多个数据库,如何保证这多个数据库之间的数据一致性,在JavaEE规范中使用2PC两阶段提交来处理跨DB环境下的事务问题,这套规范叫JTA,但是2PC是反可伸缩模式,事务处理过程中,参与者需要一直持有资源直到整个分布式事务结束,当业务规模达到千万级,2PC的局限性就越明显,系统伸缩性变得极为困难。

基于此,支付宝自己实现了一套类2PC的分布式事务方案,采用了类似BASE的思想,BASE模型反ACID模型,牺牲高一致性,获得可用性或可靠性,其最大的特点就是最终一致(Eventually consistent),最终数据是一致的就可以了,而不是实时高一致。

这套思路核心是异部恢复,如果不使用分布式事务中间件,也可以在本地系统通过适当的业务编排和异步恢复实现。需要服务的提供方支持对称接口,比如支付和退款。

请求状态机为:INIT(初始状态),SUCCESS(成功),FAIL(失败)

系统生成的每笔请求都是唯一的,INIT状态支付请求关联的退款请求状态只可能是INIT或SUCCESS(因为外部发起的退款必须原支付成功,系统内部设生成的退款请求是为了撤回状态未知的原支付请求,支付处理异常从用户角度看作失败,所以对应的撤回操作必须成功)

示例如下:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值