Redian新闻
>
订单量高速增长,如祺如何用RocketMQ应对挑战

订单量高速增长,如祺如何用RocketMQ应对挑战

公众号新闻

本文来自腾讯云中间件投稿,作者:岳小均、岁行

导语:

作为广汽集团旗下的智慧出行平台,如祺出行上线四年时间,用户规模和订单量保持高速增长。在过去的2022年,如祺出行平台累计注册用户突破1800万,同比增长64%,年度订单总量超7000万,同比增长52%。
高速增长的用户规模和订单量,对技术平台提出更高要求。
随着专快车业务的快速增长,越来越多业务需求与业务主流程耦合,导致调用链过长,接口延迟增加了数倍,整体架构无论是性能还是扩展性,都存在很大的风险,遇到节假日高峰,随时都有崩溃的风险。
为了提升架构的稳定性,保障用户体验,如祺出行于2021年启动架构升级。其中,引入消息队列做异步化是整个分布式架构设计的核心手段之一。
消息队列是一种异步通信机制,可以将消息从发送方发送到接收方,而不需要立即处理。这种机制可以带来以下好处:
1.异步化处理:消息队列可以将不同组件或服务之间的通信异步化,使得用户下单速度更快,体验更好,提高系统的响应速度和吞吐量。
2.冗余处理:消息队列可以将消息复制到多个副本中,确保即使某个节点出现故障,消息也不会丢失。
3.解耦合:消息队列可以将不同组件或业务之间的通信解耦合,每个业务只需要关注自己订阅的消息,从而将下单主流程跟其它业务流程解耦,保障了主流程的稳定和提升了运维的可观测性。
4.流量控制:消息队列可以对消息进行缓冲和限流,防止消息发送方发送过多的请求导致接收方处理不过来,从而提高系统的稳定性。   

消息队列选型  

2019年以来,如祺出行主要采用 CMQ 作为订单主业务的消息队列,CMQ 是一种大规模分布式消息系统,它具有高可用性、高吞吐量、海量存储和高并发能力等特点,可以帮助用户在分布式系统中进行异步通信,提高应用程序的可用性和可扩展性,但由于 CMQ 协议和功能简单,不支持事务消息,顺序消息和大规模延迟消息等局限性,研发团队决定采用 RocketMQ 作为升级方案,满足日益复杂的订单业务场景。

RocketMQ 介绍  

Apache RocketMQ 是一个开源的分布式消息中间件,因其架构简单、业务功能丰富、具备极强可扩展性等特点被众多企业开发者以及云厂商采用,它具有高性能、高可用性、高可靠性和易于使用等优势,尤其在互联网、大数据、企业应用、金融交易等在线业务场景成为开发者首选的消息队列产品。
RocketMQ 可以帮助业务实现异步通信、流量削峰、数据同步和日志处理等应用场景, 还提供了丰富的高级特性,比如事务消息、定时消息、重试消息和死信消息等特色功能,腾讯云针对 RocketMQ 做了大量的优化增强,在完全兼容社区版的基础上,提供了秒级定时消息、命名空间,消息轨迹和丰富的监控告警指标等企业级特性,可以很好地满足如祺订单系统等各种复杂的消息处理需求。

如祺打车业务流程介绍        

         

在整个下单流程中,从预估到下单,再从派单到开始服务,最后到费用结算,一共要经过 20+ 流程环节,其中计费订单系统是所有系统的核心,从用户输入上下车地点,背后的业务系统就开始工作,比如营销系统查询用户折扣和优惠、地图系统开始做路径规划、安全监控系统做分控计算、预派单系统提前做派单分析等,业务系统需要完成大量的计算任务,对数据的实时性、准确性和一致性要求非常高,并且涉及大量的系统交互,这对整个系统的稳定性要求提出很大的挑战。     

通过 RocketMQ 做异步化改造   

     

在没有通过 RocketMQ 处理之前,各个系统之间的耦合度非常高,系统稳定性风险高,引入 RocketMQ 完成了下单异步化改造, 大量任务异步通信处理,大大提升了订单业务系统的可扩展性和可靠性,其主要体现在以下几个方面:
1.  下单速度
由于整个下单的流程都已经实现了异步化,因此从询价到接单的整个流程只有3-5个简单的同步操作,保障了整个下单的体验。(在运力充足的前提下,大约1.2s 就能完成接单流程)。
2.  业务的扩展性
风控、安全、营销、派单有非常多复杂的业务逻辑,例如发券、动态折扣等,如果没有用消息队列做消息共享,就需要做N*N 的远程调用,增加了系统复杂度,现在只需要增加一个下游订阅,就可以扩展新业务逻辑。
3.  业务可靠性
        由于业务的链条很长,因此需要做好各个环节的兜底处理,下单异步化后,可以做到关注点分离,下单主流程不会因为某个节点出现问题导致阻塞。举个例子: 在下单前,系统会异步计算好路程的近似路程公里数,假设地图服务出现延迟或者异常,就可以直接使用,保证了系统的可靠。

RocketMQ 在订单系统的应用  

定时消息场景  

定时消息是指消息发送方将消息发送到 RocketMQ 时,消息不是立即可以被下游订阅者消费,而是指定消息在将来一段时间才可以被消费。
RocketMQ 开源社区版(4.x版本)没有支持秒级精度的定时消息方案,只能指定几个固定的延迟级别,腾讯云在社区版的基础上,通过基于时间轮的调度引擎,先将定时消息暂存在内部定时消息队列,再通过调度引擎按指定的定时时间,将消息调度到普通消息队列,下游消费方才可以正常消费消息,默认最长可以支持40天的定时范围(如果购买了专业版的客户,可以通过工单申请更长的定时范围)。

在打车业务中,有大量的定时消息场景,比如订单完成超过一定时间后其状态自动流转,订单超过一定时间未接单自动提醒等业务场景,在未接入 RocketMQ 之前,要依赖轮询数据库来实现,对数据库压力非常大,接入 RocketMQ 后,不仅大大缓解了数据库压力,系统的依赖关系也大量简化。

事务消息场景  

事务消息是 Apache RocketMQ 提供的一种高级消息类型,支持在分布式场景下保障消息生产和本地事务的最终一致性,尤其是在对数据一致性要求高的交易场景有广泛的应用,主要核心过程如下。
1.生产者发送消息到 RocketMQ 中。
2.服务端收到消息后将消息存储到半消息Topic 中。
3.当本地事务执行完成。
4.生产者主动将事务执行结果发送到 RocketMQ 中。
5.若本地事务执行结果超过一定期限还没反馈,RocketMQ 将执行回查逻辑。
6.生产者收到消息回查后,需要检查对应消息的本地事务执行的最终结果,并反馈事务状态,有以下三种情况:
  •  TransactionStatus.COMMIT 提交事务,消费者可以消费到该消息。
  •  TransactionStatus.ROLLBACK 回滚事务,消息被丢弃,消费者不会消费到该消息。
  • TransactionStatus.UNKNOW 无法判断状态,等待再次发送回查。
7.当事务执行成功,RocketMQ 将事务消息提交到 real topic,待消费者消费。
         
打车业务中,有多个业务系统涉及交易数据的一致性,通过事务消息和本地数据库事务结合,确保了系统之间数据的一致性,并且简化了业务开发的复杂度。

顺序消息场景  

顺序消息可以保证同一分区顺序key的消息的消费顺序和发送顺序一致,常用于订单交易,金融,电商等业务场景,将同一用户或订单的不同消息按照时序进行处理,避免处理消息乱序带来的补偿操作等复杂度。
在如祺订单系统中,上游将订单ID作为 ShardKey,同一个订单的系统都会被发送到同一个分区中,下游系统订阅消息时,就可以针对同一个订单的消息按顺序处理,避免处理订单消息乱序的复杂度,并且方便做本地缓存策略,提升系统的整体性能。 

RocketMQ 上云的收益  

相对于开源自建的 RocketMQ 解决方案,腾讯云提供了完全兼容社区版 RocketMQ SDK 的能力,还提供了元数据导入工具,并且支持多 Namespace 在集群内做逻辑隔离,客户只需要改一行接入点信息就完成迁移工作。
除了方便客户从社区版做代码迁移外,腾讯云 RocketMQ 还提供了大量运维能力,支持多集群部署管控和动态扩缩容,开箱即用的监控大盘和指标告警能力,还支持消息轨迹、消费状态、异常诊断等多样的监控定位手段,和消息回溯、消费验证、测试消息、死信重发等便捷的功能,方便问题定位和日常维护。

未来展望  

当前 RocketMQ 已经完全兼容社区版本 4.x 系列版本,并且已经支持虚拟集群和专享集群等产品形态,满足用户的不同使用场景。
2022年9月,RocketMQ  社区已经发布了5.x 版本,RocketMQ 5.x 引入了全新的弹性无状态代理模式,基于 gRPC 协议提供了新的更简洁易用的 SDK,并将当前的 Broker 职责进行拆分,对于客户端协议适配、权限管理、消费管理等计算逻辑进行抽离,独立无状态的代理角色提供服务,Broker 则继续专注于存储能力的持续优化。
2023年6月,腾讯云将基于社区 RocketMQ 5.x  版本推出新的 Serverless 产品形态,在以下几个方面持续发力:
1.弹性计算和分层存储带来更低的使用成本。
2.新的 SDK 带来更好的开发体验和多语言生态支持。
3.大数据生态更好的对接,更好的支持实时和流计算的体验。  
最终期待能够充分利用云原生带来的资源利用率的红利,以更低的成本,为客户带来全新的产品体验。


往期推荐



微软发布自己的Linux发行版,“Linux是种癌症”影响犹在

MINIX已死,那么Linux呢?

作大死!Firefox 强制弹出全屏广告惹众怒



这里有最新开源资讯、软件更新、技术干货等内容

点这里 ↓↓↓ 记得 关注✔ 标星⭐ 哦


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
从过去二十年数据看,哪些行业未来会高速增长硬核观察 #977 Docker 公司称过去三年收入增长了 30 倍资管巨头 | BlackRock 2024 Summer Internship Program开启春招倒计时 | BlackRock开放会计全职网申通道,要求精通Excel发脾气、挑战家长,如何应对孩子第一个叛逆期?BlackRock学姐分享H1B求职经历!如何90天成功上岸睡什么睡,起来嗨!餐饮订单量大增66%,官方鼓励"夜生活"聊聊 RocketMQ 主从复制英国秋招大爆发!高盛、BlackRock、BCG、Meta...新开300+岗位!CNN、GRNN、CLSTM、TD-LSTM/TC-LSTM…你都掌握了吗?一文总结情感分析必备经典模型(一)2023招聘季 | BlackRock (US) 已开放Data类全职岗位RocketMQ 最佳实践之坑马克谈天下(373) 怀念坂本龙一和他的那些不朽乐曲花费上千的一套新刀中兴通讯2023年一季度净利26.4亿,增长超19%,第二曲线快速增长RocketMQ源码中,7种导致重复消费的坑!"耶伦和美商界领袖开闭门会,希望与中国合作应对挑战"华大智造 2022年报&2023年一季报点评:基因测序业务快速增长,海外市场空间可期!【东吴医药朱国广团队】业务高速增长,如祺出行如何用腾讯云消息队列 RocketMQ 应对挑战挑战TikTok“地铁冲浪” 两名14岁男孩一死一重伤!社媒各类恐怖挑战何时休?“昏迷挑战”、“破颅挑战”已造成多人死亡资管一哥 | BlackRock 2024 Summer Internship Program开启MercadoLibre:在高速增长的道路上遭遇“减速带”?订单量大增66%!一季度的经济增长,比以往的质量高Docker容器超全详解,别再说不会用Docker了!龚俊四月行程康缘药业2023一季报点评:业绩快速增长,二线基药品种迎头赶上【东吴医药朱国广团队】亚马逊雨林三首习惯,目标,维生素,教练的分析一文搞懂TCP、HTTP、Socket、Socket连接池陌上花开975 Knock Knock~有空吗,我想和你谈个恋爱 | 罗德岛设计学院,善解人意,美剧粉PackedBert:如何用打包的方式加速Transformer的自然语言处理任务彭博债券南向通双周报 | 全球CDS市场高速增长;涨跌晴雨表;流动性评分Rocket Boy 诺亚:小小又上翘的白毛双马尾兔女郎!RocketMQ事务消息初体验
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。