【分布式事务】可靠性消息最终一致性方案

177 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

在产品服务宕机或者出现异常情况下,导致该服务没有收到TCC事务协调器的Cancel或Confirm请求,针对这种情况,TCC事务框架会记录一些分布式事务的操作日志,保留分布式事务运行的各个阶段和状态。TCC事务协调器会根据操作日志来进行重试,以达到数据的最终一致性。

注意点:TCC服务支持接口调用失败发起重试,所以TCC暴露的接口都需要满足幂等性。

基于可靠性消息最终一致性方案

基于可靠性消息的最终一致性是比较常用的分布式数据一致性解决方案,它主要利用消息中间件(Kafka、RockMQ或RabbitMQ)的可靠性机制来实现数据一致性的投递,在电商平台的支付场景下,用户完成订单的支付后不需要同步等待支付结果,可进行其他操作,但是对于系统来说,大部分是在发起支付后,等到第三方支付平台提供异步支付结果通知,再根据结果来设置订单的支付状态,如果是支付成功的状态,平台基于营销策略还会给账号增加一定的积分,当系统收到第三方返回的支付结果时,需要更新支付服务的支付状态,以及更新账号的积分余额,涉及到两个不同服务的数据一致性问题,在这种场景下不要求实时数据一致性,所以可采用基于可靠性消息的最终一致性方案来保证支付服务和账号服务的数据一致性。支付服务收到支付结果通知后,先更新支付订单的状态,再发送一条消息到分布式消息队列中,账号服务监听指定队列消息并进行对应的处理,完成数据一致。