订单管理模块,服务解耦
怎么解除结合?
eg:有支付成功的订单,已经发货了。 用户要取消订单吗? 这个场景在商业设计上怎么解除结合?
可能涉及的业务:订单业务、物流业务、支付业务(仅暂时罗列这三项业务) ) )。
这三项业务可能出现的实际业务方案:
1、用户取消订单-----订单业务--- -订单服务;
2、用户(订单)退款----支付业务----支付服务;
3、发送的货物返回原路----物流业务----物流服务(或第三方物流服务);
按照事物发展的时间顺序排列上面三个业务场景应该是这样的:
用户开始取消订单----调用订单服务-----订单取消成功-----调用支付服务----退款开始成功----调用物流服务(货物返还
这种串行设计和服务呼叫(串行同步呼叫)的问题:
1 .调用链接越长,链接越长越容易出错(技术的实现等需要循环) )。
2 .执行效率低(并发效率下降,增加服务负担);
优化方法:
1、串口改为并口:如何做到并口? 1、2、3是并发的,1是失败的2和3似乎可以成功回滚或补偿事务。 1补偿失败了,不是很尴尬吗;
2、这是什么业务? 是订单取消业务,退款和物流是订单退款后提取的业务,是从属业务; 因此,先处理主营业务,在主营业务处理成功后,并行处理2和3; 解除主从业务的结合,采用什么样的技术手段来实现是另一回事;