分布式事务解决方案
分布式事务一直是软件开发中老生常谈的问题,去面试的时候,无论是去打螺丝呢还是去造飞机呢,都会问一问分布式事务。对于没有接触过的开发者来说,一听这高级一点的名词就会产生恐惧的心理,感觉其很复杂。其实分布式事务就是解决问题的方案,其实现的方式不唯一,其要解决的问题就是保证数据的最终一致性。分布式事务其核心就是保证数据的最终一致性,也就是说数据在同步的过程中可以有不一致的情况,但数据最终要保证一致。常见如银行转账问题,A账户扣减,B账户到账。现在的项目基本上也都是分布式的架构,一个项目中存在着好几套系统,其中也有对应的数据交互,常常会遇到的一种问题就是两个系统中的数据相互依赖且相互调用同步,当A系统同步到B系统时网络异常或是其他的问题导致B系统没有接收到数据,使系统出现各种各样的关联性问题。
1.两系统中数据同步问题探索
现在有一种场景是要从A系统中同步订单数据到B系统,我们怎么能保证在同步的过程中不出问题,或是保证数据最终一致呢。
- 将同步的订单推送到MQ中,同时在A系统中添加一条推送记录且同步的状态为未同步
- B系统去消费MQ中的消息,消费成功后再将消息推送到MQ
- A系统接收MQ中B系统同步成功的订单,并修改本地的订单状态表对应的数据为已同步的状态