写点什么

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


2023-06-04 21:329873

评论

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

线上机器CPU占用高分析实践

京东科技开发者

MCP+LLM+Agent:企业AI落地的新基建设计

测试人

北京理工大学医工交叉教学实践分享(3)|如何搭建并利用AI教学助手实施教学

ModelWhale

AI教育 医工融合 北京理工大学

中国企业出海战略跃迁:跨端技术革新与流量分发范式重构

xuyinyin

Electron桌面端开发安全性实践

inBuilder低代码平台

Camtasia中文版免费下载教程,Camtasia2024最新版激活码密钥分享

凡凡不烦

录屏软件 视频编辑工具 Camtasia Studio2024 视频剪辑软件 屏幕截图视频录制软件

数据安全的意义和价值你知道吗?一文让你了解!

行云管家

网络安全 数据安全

扩容之旅:从 0 到 100 万用户

俞凡

架构 最佳实践

轻应用技术跃迁:从PWA到小程序的生态重构

xuyinyin

广告拍卖模拟器AuctionGym获最佳论文奖

qife122

拍卖理论 广告技术

搞懂这两个组件,Spring 配置问题少一半!

量贩潮汐·WholesaleTide

spring

架构师必备:实时对账与离线对账

电子尖叫食人鱼

数据库 架构

YashanDB SYSDATE函数

YashanDB

数据库 大数据

出海品牌的舆情监测风险类型与预警机制构建

沃观Wovision

沃观Wovision 舆情监测系统 海外舆情监测

如何把 Prometheus 告警规则导入夜莺

巴辉特

Prometheus 夜莺监控

一碰即传,重构跨设备文件分享体验

HarmonyOS SDK

HarmonyOS NEXT HarmonyOS SDK应用服务

YashanDB SUBSTRING函数

YashanDB

数据库 大数据

外网远程访问RealVNC Server

贝锐

内网穿透 vnc

go学习笔记:panic是什么含义

不在线第一只蜗牛

Go 学习

YashanDB SUBSTRB函数

YashanDB

数据库 大数据

YashanDB SUBSTRING_INDEX函数

YashanDB

数据库 大数据

分布漂移下的实时异常检测技术

qife122

机器学习 在线学习

爱测智能化软件测试平台

测试人

赛博威与Dify强强联合,构建全方位企业级AI Agent

赛博威科技

AI 赛博威 dify

行业级案例深度拆解:某服装企业如何实现全仓RFID智能化改造

斯科信息

RFID解决方案 斯科信息 仓储RFID解决方案

YashanDB SUM函数

YashanDB

数据库 大数据

Taro on HarmonyOS 技术架构深度解析

京东科技开发者

Easysearch 集成阿里云与 Ollama Embedding API,构建端到端的语义搜索系统

极限实验室

Embedding openai easysearch

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