扫一扫,关注我们
微信号:375279829
背景:原来所有的订单退款,换货,库存分配,物流对接都是在一个后台系统中,系统过于臃肿,维护困难.考虑以后公司的发展,需要开发独立的订单管理系统(OMS),仓库管理系统(WMS),订单物流管理系统(TMS),库存中心(IC).
职责:参与OMS的开发,外围系统对接
遇到的技术难题和配套的解决方案
1.订单在商城付款成功且风控系统放行后,如何保证订单快速且稳定的下发到OMS?
分析及技术选型:通过对数据量(付款过风控订单高峰期能达到11/s,且保持高速上升趋势),系统之间的通讯网络(商城数据库托管在美国机房,OMS是打算部署在国内阿里云服务器),降低系统之间的耦合程度及开发成本综合考量,采用开源的企业消息系统RabbitMQ,异步处理两个系统间的订单同步问题,省了服务器的请求响应时间,从而提高了系统的吞吐量。
具体实现步骤:
1.1 商城系统开启定时任务,将负责下发的订单推送到商城的队列服务器MQ1(美国)
1.2 MQ1通过专线网络将订单消息推送到OMS的队列服务器MQ2(广州)
1.3 OMS用进程管理工具supervisor配置多个服务进程消费MQ2中的消息,并开启了supervisor自动重启开关
1.4 消费进程支持消费失败重试,可重试三次,三次消费均告失败触发电话告警,通知人工介入查找消费失败原因
1.5 为防止漏单,OMS捞取指定时间段内同步成功的订单号和商城提供的推送成功的订单号进行数据对比,对差集进行分析排查
2.订单由商城流入OMS后,立马请求库存中心将预分配库存转换成正式库存,偶尔由于专线波动导致订单同步过慢,触发队列积压告警,如何解决?
分析及解决方案:OMS与库存中心的专线出问题,会导致订单同步时间过长,订单积压在OMS队列没有正式同步到OMS,无法对订单进行编辑,严重影响订单处理效率.分析一下是因为业务不合理,订单同步到OMS的瞬间就去请求正式库存,而请求库存中心属于跨系统调用,很难保证不出问题,需要业务解耦,将订单下发及请求库存分配拆分开来.
具体实现步骤:
1.1 订单成功同步到OMS,将需要请求库存中心的数据组装好塞入队列ReqICQueue,快速给MQ2一个basicAck响应,好继续处理下一个消息
1.2 单独开启多个消费进程负责消费队列ReqICQueue内的消息,实现解耦
商城下单,付款订单同步到oms
通过接口实时请求订单同步会导致一些订单同步出错,需要想办法去解决处理。例如改为队列间的同步,商城把符合下发的订单塞入商城队列,用一个同步脚本把商城队列的消息同步到oms队列,oms再启动几个消费进程消费oms队列中需要同步的订单消息,队列之间的消息同步是很快的,没有任何的业务逻辑。一旦订单消息到达oms之后,oms进行任何处理都可以,项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大节省了服务器的请求相应时间,从而提高了系统的吞吐量。
订单同步到oms之后,需要请求库存中心分配库存
涉及到两个系统之间的交互,因为网络超时导致库存分配成功了但是oms接受不到库存分配成功的通知。解决方案可以是oms定期扫描哪些商品符合去分配库存但是没有记录仓库值的订单商品,再去请求库存中心,直到拿到仓库值为止。
订单商品分配库存之后,通知wms捡货打包
仓储会再一次检查库存是否充足,充足继续作业,库存不足则再次请求
库存中心分配库存,仓储打包出仓后,就交给tms负责对接物流,实时返回包裹的物流轨迹