作者:贾路
我先做个简短的自我介绍,从 2003 年至今,先后服务于盛大和在线教育行业,也有过创业的经历,也算是一名互联网老人。
点击查看: 中免日上资深运维总监 贾路:RocketMQ助力中免日上打造稳定可扩展的在线交易系统
2018年的时候,我从沪江离开,加入了现在应该是国内最大的跨境电商 SHEIN,在SHEIN 服务了两年之后,在2020年我再次加入了一家创业公司。在2021年的年中,我加入了中免日上。在整个职业生涯的二十多年里,其实一直都是在运维和安全的行业里面做不断的沉淀和深耕。
今天的分享主要分成三个部分。第一部分就是简单介绍一下中免日上,了解公司的大概情况。第二部分是基于中免日上一些线上交易的场景,分享一下使用 RocketMQ 具体实践场景。第三部分是中免日上使用到现在的总结和展望。
公司简介
中免日上成立于 2021 年 4 月 29 号,是中国免税集团和日上科技联手成立的在线品牌零售电商平台。
整个公司在 4 月底成立之后的半年里,基本上是在做团队的组建和磨合。我是在 6 月底加入团队,然后其他的 leader 也是陆陆续续加入。基本上在 10 月底之前,中免日上完成了整个团队的第一波组建。从2021年11月开始,真正开启了中免日上针对新 APP 的开发,而且我们采用了 DDD 领域建模为核心的敏捷开发模式进行快速迭代。
整个公司的发展进程是非常快的,经过了四个多月紧锣密鼓的开发,在2022年3月上海疫情期间开始了冷启动,在3月底正式推出了新 APP,并登录了各大平台。在5月中免日上就将线上 90% 的流量切换到新版 APP 里面。
APP 上线还没到一个月的时候,就赶上了 618 大促。紧接着,我们是 9 月的周年庆大促,接着就是双十一和双十二,整个公司的节奏是非常快的。在这个过程中,周年庆的时候,我们最高的线上并发已经超过了 10 万 QPS。这个级别对于一个上线不足一年的电商平台来说这是非常有挑战的。同时从 2022 年整体上来看,整个平台承载了超百亿的 GMV。在这样的情况下,我们希望能使用开源的云原生技术,加速平台的建设。
平台架构与业务模型
接下来,我想跟大家分享的是常见的一个电商平台架构,也是我们目前的部署模式。首先在最外层的网关层和安全层,中免日上启用了一些服务,包含 CDN、负载均衡、DDoS 防护、WAF 等。
流量通过最外层之后,会落到具体的业务服务上,比如搜索、推荐等。再往后就是一些中间件,这里我们采用了非常多的云原生技术,并搭建了多种中台服务,包括数据中台、搜索中台等等,之后就是常见的各种类型的数据库。这是常见的互联网电商架构。
基于这个架构,中免日上整个业务模型分为三个:一是线上 APP 中免日上的会员购,二是会员购小程序,包括安卓端和 iOS、微信以及支付宝的小程序,这是两部分核心业务。第三个是线下免税预定业务。这个业务从 2021 年到 2022 年基本处于停滞状态,因为疫情的原因没有办法出国。但是随着国家对跨境,包括旅游进出的这样的一个政策是呈逐渐放开的态势的,在 2023 年 1 月份可能就会全部放开,所以这块业务后续也会逐渐增多。
在电商交易场景的核心架构下,中免日上最核心的就是订单和履约。我刚才也提到,中免日上是通过 DDD——领域驱动设计这样的方式来进行模块开发的。这里至少包含了四块,包括订单域、库存域、商品域和支付域,在这四个域里面,其实是有非常多的逻辑。
不管用户是在正向还是逆向的过程中,都有非常多的逻辑调用。我们在创建订单的时候,对商品价格的确认,可能跟当时的活动是有关系的,包括跟优惠券以及整个支付过程中一些热门商品跟库存是直接相关的。在确认了商品价格和库存之后,还要去调用支付域的支付接口,才能进行支付,这是正向的逻辑。
逆向逻辑还包括退款、库存归还以及一些活动权益的确认。比如说用户使用了一个满减券,当用户订单退了之后,满减券的权益也要进行释放。所以在整个过程中,我们是非常注重各个业务域之间的逻辑内聚,并且希望降低业务域与业务域之间的耦合度,让平台支撑更大的高并发的能力。
为什么选择阿里云
在这个过程中,我们也遇到了一些问题,并且在上线之初的时候,我们也走了一些弯路。在上线之后就立刻开启了对架构的调优,将跨域之间的消息通过消息队列的方式来调用。在整个过程中,我们调研了市场上几乎所有的消息队列产品和相关技术,最终中免日上选择了阿里云消息队列 RocketMQ 版来支持大规模高并发的消息调用。
交易架构解耦:基于 MQ 实现交易订单履约的异步流转
我们使用 RocketMQ,而没有使用开源技术的原因。主要是两点:一是通过充分发挥阿里云消息队列的优势,帮助中免日上实现线上优化,更加有效的完成交易链路异步化、缩短链路耗时。
第二点,整个阿里云的 MQ 集群是支持一个比较大量的高并发场景。刚才我也提到,中免日上在大促期间,已经碰到了超过 10 万 QPS 的场景。对于中免日上来说,基本上是在大促开启的前一分钟,甚至前几十秒,它的流量就可能要高于平稳期流量的十几倍甚至几十倍。在这种情况下,最前面一部分的流量洪峰,需要各种各样的中间件支持削峰操作,防止整个业务被流量洪峰冲垮。这是目前我们最看重的,也是阿里云 MQ 的能力体现。
技术方案升级:基于 MQ 定时消息实现自定义延时调度
基于中免日上真实的业务场景,展开说明一下我们用到的 MQ 的特性。刚才提到,我们在大促期间,其实会存在一些流量洪峰。在流量洪峰的时候,因为各种各样的原因,包括一些正常和异常的情况,我们会有一批订单没有立刻支付。超过了一定时间之后,需要把这些订单锁定并取消掉,同时释放库存,方便其他正常用户的购买。
最开始我们使用的方案,其实就是一个定时的数据库任务,然后进行数据库里的表单查询,查出符合我们设定的一些异常订单,之后再对这些订单做相关的处理。这个过程在大促期间,对数据库还是有一定消耗的。第一次大促结束之后,我们评估觉得这样的风险是非常高的,如果在大促期间频繁操作数据库,导致数据库产生瓶颈,这对我们来说是不可接受的。
后续我们在和阿里云团队的配合下,使用了消息队列里的一个定时场景。我们通过消息自动的定时处理,将查询数据库这个操作直接去掉了,让整个订单的状态是基于消息的流转进行状态的转换,这就极大地缓解了数据库的压力。
在这方面,阿里云 MQ 集群是支持支持百万 QPS 的能力。这也是中免日上在未来一段时间,在业务不断增长的情况下,最看重的一个功能点,是能够比较好地支撑整个业务发展。
运维效率提升:基于 MQ 全方位可观测能力提效日常运维
关于 MQ 可观测的功能,这也是阿里云 MQ 的一大特色。它可以支持 Metrics 大屏:我们关心的一些指标,包括生产者、消费者、以及当前的 TPS,能够直观地展示给我们,开箱即用。同时针对个别异常的消费情况,有一个比较好的轨迹,可以帮我们快速定位到个别异常消费的情况。最终带来的效果就是,中免日上系统稳定性提升 50%,架构复杂度降低 40%,研发运维效率提升 50%。
总结与展望
阿里云消息队列 RocketMQ 大幅提升了中免日上的业务稳定性,提升了研发运维效率。在使用了一段时间之后,我也有一些优化的建议:
比如在大促等场景下,MQ 的超时策略、弹性策略也是非常关键的特性,接下来会继续基于阿里云提供的这些能力去优化框架,同时进一步优化高阶能力的易用性,以便更好的发挥消息队列的能力。
点击此处,进入官网了解更多详情