订单中台里有个下单接口,主要实现了以下几个功能:
1生成订单数据
2调用车源服务下架SKU
3调用运营系统扣减优惠券
4调用支付系统,生成待支付订单
5通知金融系统,生成金融方案
6通知交付系统
每个功能都可能依赖外部服务,怎么保证数据一致性问题特别棘手。
我们调研了比较常用的几种解决方案:2pc、tcc、本地消息表、MQ事务消息
结合我们的业务情况,我们选择了tcc+本地消息表、MQ方式
1梳理功能确定主业务流程,从业务:影响流程走向的功能定位主业务,其他为从业务
2主业务:生成临时订单数据,其他系统服务使用TCC方案,如果各个服务confirm成功后,才生效订单数据,否则执行作废订单、调用其他服务的cancel操作
3从业务:主业务执行成功后将消息发送到MQ中,使用MQ通知各个子系统,子系统ACK回复MQ,没有收到ACK,MQ按照时间阶梯重复推送