消息中间件在邮政电子商务平台的应用

时间:2022-08-01 03:29:00

消息中间件在邮政电子商务平台的应用

摘要:通过对邮政电子商务平台系统架构及RocketMQ消息中间件技术的分析,提出对平台架构进行优化设计,利用消息中间件实现系统模块之间的解耦合,减少相互依赖的建议。

关键词:RocketMQ;消息中间件;电子商务平台;集群邮政

电子商务平台业务受理的一个重要特征是全天营业,实时交易占比高,接入渠道丰富,对接第三方系统繁多。电子商务的业务特点决定了系统在响应时间上必须满足要求,以达到更好的客户体验,确保交易完整性。对于平台自有系统,可以通过逻辑优化,尽可能避免延时,但是第三方系统的延时则不可控,通常无法干预其系统优化。本文描述了消息中间件技术在省邮政电子商务平台上的应用,实现平台交易模块的解耦合,减少模块处理延时的叠加效应,提高平台的响应速度,提升客户体验。

1消息中间件的选型分析

随着企业信息化建设的不断深入,多种业务应用相互关联,容易造成底层数据分散,应用系统间的耦合度高。消息中间件技术有两个核心功能:异步和解耦。这两个核心功能可对不同系统间的交互进行解耦,总体上提高应用系统的工作效率,增强系统的可用性、稳定性和可扩展性。消息队列已经逐渐成为企业IT系统内部通信的核心手段,可以在分布式环境下提供应用解耦、弹性伸缩、冗余存储、流量削峰、异步通信、数据同步等功能。常用消息中间件相关特点及对比如表1所示。系统在技术选型上包含以下几方面考量:一是系统要保证数据的完整性,因此选用的中间件应该支持事务处理,并保证交易数据不会丢失;二是某些业务场景会引起高并发交易,因此中间件应具备应对突发业务高峰的处理能力;三是省平台选型应与集团平台所用技术保持一致;四是优先选择支持云部署的产品。综上分析,对比常用中间件的技术特点,最终选择RocketMQ作为本次应用的消息中间件。

2RocketMQ技术简介

RocketMQ是阿里开源的消息中间件,目前归属于Apache顶级项目,它是纯Java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。RocketMQ集群包含4个模块:Namesrv、Broker、Producer、Consumer。Namesrv存储当前集群所有Brokers信息、Topic与Broker的对应关系,功能简单,稳定性高。多个Namesrv之间相互没有通信,单台Namesrv宕机不影响其他Namesrv与集群。Broker是集群最核心的模块,主要负责Topic消息存储、消费者的消费位点管理(消费进度),可理解为RocketMQ服务的注册中心。Producer是消息生产者,每个生产者都有一个ID(编号),多个生产者实例可以共用一个ID,同一个ID下所有实例组成一个生产者集群。生产者通过Namesrv获取Topic与Broker的映射关系,更新到本地内存中,再和Topic涉及的所有Broker建立长连接。Consumer是消息消费者,每个订阅者也有一个ID,多个消费者实例可以共用一个ID,同一个ID下所有实例组成一个消费者集群。消费者通过Namesrv获取当前消费Topic所涉及的Broker,直连Broker。

3邮政电子商务平台架构分析及优化

3.1平台架构分析。邮政电子商务平台架构如图1所示,业务受理交易通过各渠道系统的渠道前置子系统接入核心应用子系统,核心应用分配一个服务进程处理,再调用外联前置,将交易请求转发至第三方。整个交易过程串行,每个子系统的处理时间叠加则为整个交易的处理时间,任意环节出现延时,都会在整个交易的处理时间上产生叠加效应。对于本地系统,可以通过对各子系统的优化处理,减少延时,但对于第三方系统邮政无法干预其优化过程,因此第三方系统延时产生的影响更大。3.2RocketMQ消息中间件在平台的应用。为了解决交易延时,在核心应用子系统与外联前置之间部署一套RocketMQ消息中间件子系统,同时在核心应用和外联前置增加一对消息生产者与消费者模块,用于生产及消费消息。系统模块设计时,选择在订单生成与订单支付之间进行解耦合,订单生成后,会调用消息生产者模块主动向消息中间件登记一条消息,标志订单生成成功;后续消息消费者(位于外联前置)取走消息,并根据消息类型进行个性化处理,这里主要是进行第三方保险公司投保操作,以此实现订单生成与支付投保异步处理。优化后的电子商务平台架构如图2所示。首先,平台交易到达核心应用后,通过生产者模块向RocketMQ消息中间件推送一条消息。然后,核心应用返回前端交易已提交成功,前端交易完成,后续进行交易状态查询。最后,外联前置通过消费者模块取出消息,根据消息内容获取订单信息组装报文发送至第三方,获取第三方返回后将结果更新到订单信息中。交易流程优化后,前端的订单支付交易无需等待第三方结果,很快提示交易提交成功,通过订单状态查询功能即可获取订单状态;外联前置在第三方调用时,可以对失败的消息进行多次调用,直至达到阈值或调用成功为止。3.3RocketMQ集群部署。RocketMQ部署比较灵活,提供多种集群部署方式,通过配置可以快速形成集群部署,部署方式为异步多Master多Slave模式,每个Master配置一个Slave,部署两组Master-Slave,HA采用异步复制方式,主备消息延迟短,仅为毫秒级。这种模式的优点是,即使磁盘损坏,消息丢失也较少,且消息实时性不受影响,因为Master宕机后,消费者仍然可以从Slave消费,此过程对应用透明,不需要人工进行干预。RocketMQ在系统应用时,需要进行相关的约束设计。3.3.1增加消息去重策略。在某些情况下,应用消费了消息,但没有反馈给RocketMQ,该消息将会再次被消费,因此需要增加消息去重策略,可通过对应的状态位决定是否需要再次处理消息。3.3.2限制消息报文大小。生产消息时需控制消息报文的大小,某些应用场景不需要将所有信息都封装到消息体中,仅记录关键信息即可。3.3.3合理规划消息分组。根据RocketMQ提供的消息特性,结合业务特点,使用分组-Topic-Tag三级结构,按平台-业务-模式将消息分类。

4应用效果

RocketMQ消息中间件的应用,使交易的本地处理与第三方调用解耦合,交易各项指标都有所提升。系统优化改造后,使用LoadRunner等测试工具对邮政各业务场景进行了性能压力测试,结果显示,事务平均通过率达98%以上,事务平均响应时间为1.305s,90%的事务响应时间在2s内。前端最直接的体验是交易耗时短,系统监控发现,第三方处理超时对前端请求影响较小。

参考文献

1欧志芳.基于RocketMQ实现异构数据库同步.网络安全技术与应用,2016,12

2赵伟,周兵.基于ERP系统的消息中间件设计与实现.计算机工程,2008,10

3杨开元.RocketMQ实战与原理解析.北京:机械工业出版社,2018

作者:香华冠 单位:中国邮政集团公司广东省信息技术局