文作者:丁威 - 中通快递资深架构师,《RocketMQ技术内幕》作者,Apache RocketMQ社区首席布道师,公众号「中间件兴趣圈」维护者。
01 物流行业的业务特点
物流行业有三大业务特点:业务量庞大、实效性容忍度高以及业务复杂度极高。
作为快递行业龙头企业,中通的日均订单量早已高达5000 万,双11期间可达日均到2亿+,日均消息流转超过万亿。
在快递行业的实际日常业务中,比如早上10点下单,可能需要下午2点钟揽件,因此我们能够容忍分钟级甚至小时级的延迟。针对包裹拦截、路由变更等场景需要保证一定的时效性,但大多情况下只需尽可能保证即可。
中通快递为加盟制,其转运中心、分布中心以及网点都不在一家公司,因此业务逻辑、管控、结算等都较为复杂。
快递行业的业务系统结算、订单、运单采集等等对解耦性要求很高。此外,双十一期间流量可能为平时的3-4倍,因此也需要应对突发流量的能力。而RocketMQ的能力与我们的业务场景非常吻合,因此在快递行业的应用也是极为广泛。
02 RocketMQ在订单中心运用案例
中通基于RocketMQ构建订单中心的架构图如上。
用户在天猫或淘宝用电商平台进行下单后,订单会派至云服务器,中通自研的数据同步平台负责定位云服务器的变动日志,通过变动日志将其传入RocketMQ。
第二层链路为拼多多和京东等厂家,通过网关进入RocketMQ。
第三层为散件用户,也是通过网关进入RocketMQ。
流量到达RocketMQ以后,由订单域的消费者消费 消费者消息并写入数据库。后续的很多系统比如运单域、结算都需要这份数据,为了解耦,需要通过同步平台将数据在同步到另外topic,供各个业务系统进行订阅以及数据分发。
上述架构的关键在于如何保证 MQ 服务器性能与数据可靠性。比如 MQ 使用的刷盘策略是同步还是异步?是否开启transientStorePoolEnable提高性能?复制策略是同步还是异步?是否需要Dledger? 如何优雅运维?
RocketMQ在4.5.0版本之前即支持主从同步