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

ChatGPT狂飙160天,世界已经不是之前的样子。

新建了人工智能中文站https://ai.weoknow.com
每天给大家更新可用的国内可用chatGPT资源


导语:

作为广汽集团旗下的智慧出行平台,如祺出行上线四年时间,用户规模和订单量保持高速增长。在过去的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.大数据生态更好的对接,更好的支持实时和流计算的体验。  

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


ChatGPT狂飙160天,世界已经不是之前的样子。

新建了人工智能中文站https://ai.weoknow.com
每天给大家更新可用的国内可用chatGPT资源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/60052.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业数智化转型数智员工到底能做什么?

随着数字技术的不断成熟和应用,数据分析、数智员工、产业互联等应用场景正发挥越来越重要的作用。随着ChatGPT 的爆火,数智员工迅速进入大众视野。 揭开数智员工的真面目常见的数字员工主要分为两大类,一类是虚拟数字人,如基于“元…

在线教育平台的数据分析——用户的地域分布

文章列表 篇1:《在线教育平台的数据分析——用户精细化运营》 篇2:《在线教育平台的数据分析——课程分级》 篇3:《在线教育平台的数据分析——业务流程指标的计算》 篇4:《在线教育平台的数据分析——用户的地域分布》 前言 内容…

早教资源网站

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 网站前台:关于我们、联系我们、公告信息、二手物品、资源信息 管理员功能: 1、管理关于我们、联…

达内2020年课程资料大全

达内2020年课程资料 这是我收集的于达内训的课程视频、笔记、PPT、源代码。对于初学者十分实用 链接: [link]链接:https://pan.baidu.com/s/1W4ghE0lKrD0GV5IaJih0aQ 提取码:w29f 图片: ![Alt](https://imgconvert.cs 居中的图片: 居中并且带尺寸…

教育培训系统,软件行业的“常青藤”

教育培训系统,对于培训系统本身的功能,已经不需要再怎么说明了,因为很多人对教育培训系统了解得比官方解释还要明白。今天要说的是为什么教育培训系统能一直稳定发展下去,它为什么不像知识付费系统似的,有爆发也有沉寂…

(VIP-朝夕教育)2021-05-23 .NET高级班 02-反射

原理图 /// <summary>/// 1 dll-IL-metadata-反射/// 2 反射加载dll,读取module、类、方法/// 3 反射创建对象,反射+简单工厂+配置文件 ,破坏单例 创建泛型/// 反射反射程序员的快乐/// 反射是无处不在,MVC AOP IOC ORM Attribute /// IL:中间语言,标准的面向…

新东方国际教育为多人群提供留学语培解决方案

北京2021年12月9日 /美通社/ -- 为了给广大家长和学员提供更加立体、多维度的留学语培备考指导&#xff0c;新东方国际教育《2021-2022留学备考白皮书》于近日发布。本年度发布的白皮书依据具体用户人群划分&#xff0c;主要分为&#xff1a;可供大学生群体使用的《留学备考白皮…

在线教育、精品课程、直播课、课程交流、历史观看、订单、收藏、余额、推荐、关注、购买课程、充值、产品设计、线上教育、视频课程、教育app、在线课堂、网络教学、远程教育、教学辅导、学习平台、K12教育

在线教育、精品课程、直播课、课程交流、历史观看、订单、收藏、余额、推荐、关注、购买课程、充值、产品设计、线上教育、视频课程、教育app、在线课堂、网络教学、远程教育、教学辅导、学习平台、K12教育 Axure原型演示地址&#xff1a;https://www.pmdaniu.com/storages/12…

【报告分享】2022百度职业资格考试培训行业洞察-百度营销研究院(附下载)

摘要:职业资格证书是求职者求职就业的入场』&#xff0c;考取相关职业资格证书更是提高竞争实力的有效途径。一方面&#xff0c;提倡“人人持证&#xff0c;技能河南”&#xff0c;另一方面社会对技术人才的要求越来越高&#xff0c;要一技傍身更要有一证傍身&#xff0c;大众对…

山西天诚在线教育机构怎么样?靠谱么?

天诚在线机构还是不错的&#xff0c;之前在这家报名咨询后发现&#xff0c;他家不会存在退学费收手续费的情况&#xff0c;选择一对一上课的话也不会存在老师故意刁难学生&#xff0c;额外收费的情况。 有很多在天诚在线教育培训学校培训的学员都反馈学习效果不错&#xff0c;…

LangChain大模型应用落地实践(二):使用LLMs模块接入自定义大模型,以ChatGLM为例

angChain版本&#xff1a;0.0.147 &#xff1b;(没想到第二更LangChain已经更新到147了&#xff09; 一、国内外大模型发布现状 图1 大模型时间线&#xff08;2023-arxiv-A Survey of Large Language Models&#xff09; 模型名称企业/高校发布时间ERNIE Bot&#xff08;文心…

AI再度升级,IT业一片哀鸿遍野:程序员真的要失业了吗?

IT人员真的要失业了吗&#xff1f; 随着各个大厂已经相继传来裁员&#xff0c;降薪&#xff0c;减招的消息和ChatGPT等大型AI模型可以定制化写参考代码&#xff0c;甚至通过外接API直接帮助操作&#xff0c;IT人员似乎越来越不吃香了。 其实&#xff0c;ChatGPT有用的不是取代…

chatgpt赋能python:Python修改桌面壁纸:如何使用Python代码自动更改桌面背景

Python修改桌面壁纸: 如何使用Python代码自动更改桌面背景 在现代生活中&#xff0c;桌面壁纸已经成为个人电脑的一个非常重要的方面。它不仅可以改善我们的视觉体验&#xff0c;还可以提高我们的工作效率和生产力。许多人喜欢将他们的桌面壁纸与当前的季节或节日相匹配&#…

需求文档

产品设计是一个由抽象的概念到具体形象化的处理过程&#xff0c;通过文字或图像等方式将我们规划的产品需求展现出来。它将产品的某种目的或需求转换为一个具体的物理或工具的过程&#xff0c;把一种计划、规划设想、问题解决的方法&#xff0c;通过具体的操作&#xff0c;以理…

如何编写产品用户手册需求文档,才算合格的产品/运营

文档伴随着产品设计的整个生命周期&#xff0c;为什么这么说呢&#xff1f;产品立项时要制作“需求文档”以确保开发工作的稳步执行。 产品上线后需要设置“帮助文档”以方便用户了解产品和使用规则&#xff0c;在后期产品的运营中发挥着重要作用。 下面小编分别讲述这两种文…

产品经理基础——需求文档

了解市场→了解需求→产品设计→产品运营 产品设计&#xff1a;产品理念&#xff0c;产品方案及规划&#xff0c;产品架构设计&#xff0c;交互设计&#xff0c;原型及需求&#xff0c;项目管理&#xff0c;验收及发布&#xff0c;用户体验&#xff0c;实战点评。 综述&#…

产品需求文档模板,不用找了(附“简”例)【转】

&#xff08;转自&#xff1a;http://www.chanpin100.com/article/101751&#xff09; 记得自己在学习PRD文档撰写的时候&#xff0c;总希望能找到一份比较全面详细又易懂的模板。如果你也曾有相同的困恼或者尚未遇到满意的答案&#xff0c;或许本文可以提供不错的参考。 &am…

《预训练周刊》第66期:智源2022大模型创新论坛、 ChatGPT手把手debug代码、AI与物理的交融...

No.66 智源社区 预训练组 预 训 练 研究 观点 资源 活动 周刊订阅 告诉大家一个好消息&#xff0c;《预训练周刊》已经开启“订阅功能”&#xff0c;以后我们会向您自动推送最新版的《预训练周刊》。订阅方法&#xff1a; 方式1&#xff1a;扫描下面二维码&#xff0c;进入《预…

串口输出中文乱码

串口输出中文乱码 问题产生寻找问题产生的原因解决问题总结推荐两个串口助手&#xff1a; 问题产生 最近在使用OpenMV&#xff0c;但是由于没有转接板和软排线来连接串口&#xff0c;不过手上有一块STM32F4的开发板&#xff0c;于是就想到将其作为一个转接&#xff0c;通过其…

php JpGraph使用和中文乱码

使用 在使用JpGraph的时候我一般是把它的类库放到了程序的根目录下面(解压之后的src中的文件&#xff0c;除了Examples文件夹之外)在用的时候只需要include就可以了 还可以将解压之后的src中的文件重命名为jpgraph,将它放到d盘&#xff0c;再在php.ini文件中添加到include_pat…