NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

业务高速增长,如祺出行如何用腾讯云消息队列 RocketMQ 应对挑战

岳小均,岁行

  • 2023-06-04
    北京
  • 本文字数:3584 字

    阅读完需:约 12 分钟

业务高速增长,如祺出行如何用腾讯云消息队列 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. 下单速度

  2. 由于整个下单的流程都已经实现了异步化,因此从询价到接单的整个流程只有 3-5 个简单的同步操作,保障了整个下单的体验。(在运力充足的前提下,大约 1.2s 就能完成接单流程)。

  3. 业务的扩展性

  4. 风控、安全、营销、派单有非常多复杂的业务逻辑,例如发券、动态折扣等,如果没有用消息队列做消息共享,就需要做 N*N 的远程调用,增加了系统复杂度,现在只需要增加一个下游订阅,就可以扩展新业务逻辑。

  5. 业务可靠性

  6. 由于业务的链条很长,因此需要做好各个环节的兜底处理,下单异步化后,可以做到关注点分离,下单主流程不会因为某个节点出现问题导致阻塞。举个例子: 在下单前,系统会异步计算好路程的近似路程公里数,假设地图服务出现延迟或者异常,就可以直接使用,保证了系统的可靠。


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 无法判断状态,等待再次发送回查。

  • 当事务执行成功,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. 大数据生态更好的对接,更好的支持实时和流计算的体验。


最终期待能够充分利用云原生带来的资源利用率的红利,以更低的成本,为客户带来全新的产品体验。


相关阅读:

专访阿里云 RocketMQ 团队:现代微服务架构需要新的消息系统


今日好文推荐:


连代码都没写就敢要融资:被ChatGPT带火的向量数据库,带来了一大波造富神话


《2023 大语言模型综合能力测评报告》出炉:以文心一言为代表的国内产品即将冲出重围


免费版“Github Copilot”,编程能力还翻倍?!谷歌硬刚微软,推出全新Colab编程平台


百度回应 Bing 成中国桌面搜索第一;阿里回应大裁员传闻;文心一言市场负责人怒怼科大讯飞|Q资讯


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2023-06-04 21:327746

评论

发布
暂无评论
发现更多内容

郭炜:就算倒在离开源成功最近的五米,也要让下一代开源人坚定前行

腾源会

开源 WeOpen Talk

一图看懂软件缺陷检查涉及的内容

华为云开发者联盟

安全 软件开发 软件缺陷 缺陷漏洞 防护

我是如何把vue项目启动时间从70s优化到7秒的

CRMEB

开源公司IPO热潮已到来?市值153亿美元的HashiCorp带来了哪些启示?

腾源会

开源 开源商业化

Zilliz 上榜「中国科创好公司」

Zilliz

从MongoDB迁移到TDengine后,成本显著下降

TDengine

数据库 tdengine 时序数据库 后端技术

【日常工作】配置中心JVM堆外内存异常增长

MindController

小程序下一破局点?钉钉小程序卡片,应用与平台的深度集成

蚂蚁集团移动开发平台 mPaaS

前端 钉钉 移动开发 卡片技术

【docker 总结】第五篇 - 制作镜像、数据盘

Brave

Docker 12月日更

一个有生命力的开源社区应该是怎么样?

科技热闻

查询优化技术解读:以分布式搜索引擎 Transwarp Scope为例

星环科技

技术揭秘!百度Geek说年度优质技术干货合集

百度Geek说

技术专题合集

为什么需要会计CRM系统?

低代码小观

低代码 企业管理系统 ERP CRM系统

【签约计划第二季】正式评审环节入选名单公布

InfoQ写作社区官方

签约计划第二季 热门活动

ONES 解码:为何数字化是“超级工程”

万事ONES

数字化 ONES

Linux学习分享之标准大页和透明大页

@零度

Linux

浅谈大型商城的订单系统设计方案

北游学Java

Spring Boot 订单管理 Java、 项目 商城项目

如何提升软件测试思维?

和牛

软件测试 测试 测试右移

【云计算】私有云是什么?主要集中在哪些行业?与公有云有什么区别?

行云管家

云计算 公有云 私有云

KubeCube 用户管理与身份认证

网易数帆

GitHub Kubernetes JWT Oauth kube

Linux网络管理技术-OSI七层模型和TCP四层模型

学神来啦

Linux 运维 TCP/IP syn OSI七层协议

超大超详细图解,让你掌握Spark memeoryStore内存管理的精髓

华为云开发者联盟

Java spark 内存管理 Spark memeory Store memory Store

人和人差距是如何产生的

卢卡多多

28天写作 12月日更

技术教程 | 在线 KTV 实现过程(内附demo体验)

ZEGO即构

Java 音视频 在线KTV实现教程

百万人都在求的网络安全学习路线,渗透漏洞防御总结(附图)

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞扫描

Linux之cp命令

入门小站

Linux

星环云原生数据湖,为企业精准决策提供全方位技术支撑

星环科技

【堡垒机】云堡垒机价格是多少?有几种计费模式?

行云管家

云计算 网络安全 等级保护 过等保

国家质量基础设施NQI一站式服务平台系统开发建设方案

a13823115807

系统开发 质量基础设施“一站式” 平台建设

如何满足大数据集群服务功能真实需求?

星环科技

netty系列之:从零到壹,搭建一个SOCKS代理服务器

程序那些事

Java Netty 程序那些事 SOCKS 12月日更

业务高速增长,如祺出行如何用腾讯云消息队列 RocketMQ 应对挑战_开源_InfoQ精选文章