打车业务下单高并发解决方案

简介: 打车业务下单高并发解决方案

 

 

image.png

image.png

 

前言

在技术领域有一条准则,即不存在银弹技术。在实际工作中,通常无法通过几项简单的技术组合就解决实际业务中各种场景下的复杂问题。虽然追求架构的简单简洁也是架构师的目标之一。但必须认识到架构的简单简洁和没有银弹技术是一对矛盾体。正是整个矛盾体在推进着技术的不断进步。

本方案的目的在于抛砖引玉,介绍了 GTS TAM 团队通过对实际技术服务工作中遇到的问题的思考,形成的一种解决方案。希望这个解决方案能够对大家工作中的实际问题的解决起到启发作用。如有兴趣了解详细细节,欢迎联系阿里云 GTS TAM 团队。

1. 行业背景

打车业务是出行行业的一个细分领域。这些年打车业务一直处于快速发展阶段,除了不断加大一二线城市发展,还不断开拓三四线城市市场。8月25日滴滴出行的全球日订单量首次突破了5000万单。

打车行业的基本需求是撮合司机和乘客,达到满足乘客出行需求的目的。打车系统核心是以定位、地图等地理信息服务和订单服务。除此以外,打车系统还包含支付、会员、计价等业务服务,容器、数据库、缓存、消息队列等云服务,以及人工智能、大数据、视频监控等综合性技术服务。

1.1 业务特点

打车行业的一个特点是其乘客端业务流量呈现明显的潮汐波动。此外,还会因为节假日和恶劣天气等原因导致业务流量波动,并且这种波动存在一定的不确定性。

image.png

 

1.2 技术挑战

打车行业不易预测的业务峰值波动对包括订单系统在内的打车业务核心系统的伸缩性,以及高并发能力、稳定性提出了比较高的要求。高并发能力和稳定性一定程度与伸缩性相关,业务系统的架构设计如何提供可伸缩的设计,自然也会提升系统的并发能力和稳定性。

应用从分层的角度来说通常分为接入层、应用层和数据层。其中,数据层的伸缩是重点和难点。目前阿里云 PolarDB 是数据库领域最出色的弹性解决方案。但目前数据库弹性伸缩还是只使用业务高峰时间和流量相对确定的场景。

2. 方案目标

本方案是聚焦打车业务的订单场景的弹性伸缩解决方案。目的在于订单这一打车业务核心系统能够在无需人工操作的情况下,满足不确定的业务高峰对打车订单系统的冲击,为客户提供能满足高并发且成本可控的订单系统架构设计。

3. 详细设计

为达到上述目标,本方案提供了如下架构设计。下图是整体架构设计,左图是传统的订单系统架构,分接入、应用和数据三层。右图是弹性下单架构方案设计。在原有基础上增加了两层:前向订单服务和订单队列。在这两层之后,是订单核心服务和订单数据库。

前向订单服务将下单请求处理后,将数据写入订单队列中即可返回。订单队列提供了高并发吞吐和较低的响应时间。订单队列由缓存和消息队列组成,缓存以用户维度保持最近的叫车状态信息,而队列则提供了高并发下单请求的持久化能力。

打车业务的下单场景能采用这种设计的原因是打车业务的订单是以乘客 ID 为维度,单个乘客在同一时间段只有一个进行中订单。整个流程的顺序是先下单,再履约,最后支付。因为支付是在最后一步,而下单和履约的主体不同(下单的主体是乘客,履约的主体是司机),因此下单可异步化。

image.png


接下来将介绍新架构所引入的两层新设计。

 

3.1 前端订单应用层

前端订单应用层的功能主要包括以下几点:

  1. 基本校验、风控及安全检查
  2. 异步下单
  3. 限流降级
  • 功能一:基本校验、风控及安全检查

    这一步是业务参数的校验,以及风控安全方面的检查。这一类操作的特点是可通过缓存等手段优化性能,并在不影响主要业务的情况下进行降级。将这些可缓存、可降级的操作前置到可弹性伸缩的应用层,有利于承载高并发的业务流量。

  • 功能二:异步下单

    因为新方案增加了订单队列层,因此需要前端订单应用层实现异步下单的功能。这里涉及的操作主要是生成下单请求,将请求保存到缓存和队列中,以及一些业务处理,比如根据加价金额及其它参数,控制下单队列优先级。
    这里需要注意的是这一步功能需要保障下单功能的幂等性、保证数据一致性和考虑请求乱序的问题。这些问题都是分布式系统研发过程中常见的问题,此处不再赘述。

  • 功能三:限流降级

    因为下单链路上增加了缓存和消息队列,如果必须强依赖于这些服务,相较于原来的架构设计,可用性是下降的。因为新的订单队列层是为了实现提升系统在高并发场景下的弹性能力,因此不是必须的依赖。在 Redis 或消息队列出现异常时,前端订单服务需要能够将请求绕过订单队列层,直接调用订单核心服务,实现叫车下单功能。

3.2 订单队列层

如前所述,订单队列由缓存和消息队列组成。缓存以乘客维度记录最新的叫车状态,消息队列则持久化叫车请求。

  • 接口幂等性

    在具体实现中,方案建议先将叫车请求写入消息队列,再写入缓存。原因是缓存中的数据表示叫车状态,如果先写入缓存,则无法通过其中的数据判断是否写入消息队列成功。

  • 请求顺序性

    请求异步化之后,请求的顺序和实际处理的顺序将无法保持一致。此时需要由业务系统实现上的设计保障新请求的处理结果不会被旧请求覆盖。

  • 数据一致性

    缓存中的数据表示乘客的出行状态,而乘客的出行状态不只是来自于乘客的主动请求,而也会根据订单状态的不断变化而变化。因此,缓存中的乘客出行状态数据需要和后端订单处理反映的实际状态保持一致。

4. 技术架构

4.1 方案 PK

弹性应用层 + PolarDB 弹性数据库 vs 本方案(订单队列异步下单)

应用架构的弹性伸缩方案的重点是数据层。数据库采用 PolarDB,可以实现数据库层的弹性伸缩。这个方案的优点是架构简单,避免异步下单所带来的研发复杂性和难度。缺点是需要人工执行伸缩,及时性不足。同时导致十几秒(最多30秒以内)的业务中断。因此较为适合业务高峰时间明确的场景。

订单队列异步下单方案的优点是弹性伸缩能力强,适应范围广。缺点是架构较为复杂,增加研发成本。

4.2 技术选型

4.2.1 弹性应用层:ACK + ECI

在上述的解决方案中,前端的应用层需要可弹性伸缩的计算服务给予支持。本方案建议采用 ACK + ECI 的组合。ACK 是阿里云 Kubernetes 服务(Alibaba Cloud Kubernetes)的缩写,ECI 是弹性计算实例(Elastic Compute Instance)的缩写,是一种 Serverless 技术,为包括容器服务在内上层计算资源提供无服务器的计算实例。

使用 ACK + ECI 可以构建弹性的应用层。ACK 本身也可以提供一定范围的弹性伸缩能力,但 ACK 弹性伸缩分为 Pod 和 Node 弹性伸缩两部分。Pod 运行在 Node 之上,但 Node 资源充足时,只需对 Pod 进行伸缩。当 Node 资源不足时,需要先扩容 Node,然后再创建新的 Pod。因此,单纯使用 ACK 的伸缩特性的缺点就是时效性不足。同时还存在资源利用率不足的问题。

为解决 ACK 伸缩性的不足,本方案建议采用 ACK + ECI 的架构。ACK 通过 Virtual Node 与 ECI 连接。扩容时当 Node 资源不足时,会将扩容的 Pod 调度到 Virtual Node 上。 Virtual Node 通过 virtual-kubelet-autoscaler 将 Pod 扩容请求调度到 ECI 上。

 

image.png

 

4.2.2 订单队列:RocketMQ + Redis

本方案推荐采用 RocketMQ + Redis 实现订单队列。
RocketMQ 是阿里开源的消息队列产品,与 Kafka 相比,虽然吞吐量不如 Kafka,但具备出色的稳定性和众多适合在线业务的特性。因此,常选用 RocketMQ 作用在线业务的消息队列,而 Kafka 通常适合大数据处理。

阿里云提供的 RocketMQ 分标准版和铂金版两种。虽然铂金版价格较高,但处于稳定性的考虑,因此此方案推荐采用铂金版作为线上订单队列中的消息队列的实现技术。

阿里云提供了多种版本的 KV 存储服务,兼容 Redis 协议。订单队列所需的 KV 存储服务建议根据实际业务量评估规格,通常采用主从版即可。

4.3 部署架构

 

image.png

 

接入层和应用层容器服务双可用区部署。MySQL 和 Redis 的主节点部署在其中一个可用区。

我们是阿里云智能全球技术服务-SRE团队,我们致力成为一个以技术为基础、面向服务、保障业务系统高可用的工程师团队;提供专业、体系化的SRE服务,帮助广大客户更好地使用云、基于云构建更加稳定可靠的业务系统,提升业务稳定性。

原文链接

本文为阿里云原创内容,未经允许不得转载。

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

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

相关文章

Serverless 时代 DevOps 的最佳打开方式

简介: 传统软件开发过程中,开发和运维是极其分裂的两个环节,运维人员不关心代码是怎样运作的,开发人员也不知道代码是如何运行的。 作者 | 许成铭(竞霄) 来源 | 阿里巴巴云原生公众号 DevOps 简析 传统软…

2020 q5l使用手册电子版_关于2020下半年自考本科毕业生论文预答辩题目查询的通知...

一、对象:2020下半年获论文预答辩资格毕业生(名单见附件1)二、查询方法:请登录以下网址: 输入个人准考证和姓名,查询论文预答辩题目。三、相关要求1. 请将《自学考试本科毕业论文预答辩记录表》(见附件2)中个人相关信息以及预答辩…

现实版“奇异博士”?原来是这款神秘的“数学黑盒”

简介: 现实版“奇异博士”?原来是这款神秘的“数学黑盒”供稿团队:阿里云市场部在漫威电影《复联3》中,奇异博士预测到未来有1400多万种可能,而胜利却只有一种,这唯一的最优解成为他们战斗的希望。只可惜&a…

如何在Spring生态中玩转RocketMQ?

简介: RocketMQ作为业务消息的首选,在消息和流处理领域被广泛应用。而微服务生态Spring框架也是业务开发中最受欢迎的框架,两者的完美契合使得RocketMQ成为Spring Messaging实现中最受欢迎的消息实现。本文展示了5种在Spring生态中文玩转Rock…

enum 有什么好处_林卡尔|先买地板后装修的三大好处

【中华地板网】现在很多装饰公司和设计师, 提倡的装修新模式——“先定地板后装修”。 后装修并不是买完地板后再开工, 而是在开工之前, 先把地板风格、颜色、尺寸、价位定下, 然后让设计师根据地板进行其他设计。 那么这样做究竟…

华为推出业界首个分布式云原生产品:华为云UCS,持续创新,深耕数字化

华为面向ICT产业的全球年度旗舰活动——华为全联接2021拉开序幕。华为轮值董事长徐直军进行了“以持续创新加快数字化发展”的大会主题演讲。 本次大会围绕“深耕数字化”主题,探讨如何深入业务场景,把数字技术与行业知识深度结合,解决核心业…

Flink 必知必会经典课程四:Fault-tolerance in Flink

简介: 本文由 Apache Flink PMC , 阿里巴巴高级技术专家李钰分享,主要从有状态的流计算、全局一致性快照 、Flink的容错机制、Flink的状态管理 四个方面介绍 Flink 的容错机制原理。 作者 | 李钰 分享人:本文由 Apache Flink PMC , 阿里巴巴…

用云原生的思维践行云原生,华为云深耕数字化,一切皆服务

[中国,深圳,2021年9月23日] 华为全联接2021于9月23日开幕。华为轮值董事长徐直军进行了“以持续创新加快数字化发展”的主题演讲,发布业界首个分布式云原生产品——华为云UCS,即 “无处不在的云原生服务”。华为高级副总裁、华为云…

白苹果了怎么办_苹果手机出现白苹果、死机、不断重启怎么办?

小伙伴们的苹果设备是否出现过白苹果、不断重启、更新失败、卡机死机、进入了恢复模式等情况呢?小编自己的iPhoneXR就遇到过,不知道怎么操作的就进入了恢复模式,有时候手机卡机需要强制重启,遇到问题就想去外面的修理店解决一下,…

Knative 多容器支持介绍

简介: 微服务和容器化带来了将应用程序分解成可重复使用的小型单元的诉求,这些单元通常作为单独的进程运行,或者在单独的容器运行。 Kubernetes的Pod模型允许用户创建一个部署单元,该单元可以打包多个容器作为应用程序的单个实例。…

GitHub Action + ACK:云原生 DevOps 落地利

简介: 据信通院《中国 DevOps 现状调查报告(2020年)》显示,63% 的企业已经实践落地 DevOps,采用持续交付流水线打通开发、测试、部署和运维多个环节。但是依然有 20% 的企业反馈实践 DevOps 复杂,自建 Jenk…

win7硬盘安装工具_如何重装电脑安装Win7 系统?最简单,最便捷的办法,值得收藏...

没有U盘、没有光盘怎么安装Win7系统?最简单、最方便的就是用硬盘安装了。在保证能进入系统的前提下,本地硬盘安装Win7系统,能够让你快速体验新的Win7系统。一、安装前准备保证能够正常进入系统;下载Win7系统:64位&…

网络架构优化--云企业网典型场景分析for客户

简介: 网络架构优化--云企业网典型场景分析for客户1. 背景描述 客户从传统的高速通道迁移到云企业网,加入云企业网的VPC,VBR默认全通,但是实际业务场景需要更严格的策略做选择性放通。此外,由于测试账号没有实际专线和…

五个问题,三大策略,手把手教你定制App性能监控方案

作者:友盟U-APM团队 Why? 为什么要做应用性能监控? 首先,我们要知道应用性能监控具体指什么?以及目的: 监控是一套完整的“监视报警”的系统。对于像我们这样的App开发者来说,应用性能监控是衡量App的第…

c++ 打印条码_金蝶盘点机PDA仓库条码管理之——外购入库扫码开单操作

优势点:收到供应商送货后,仓管员手持盘点机PDA现场将需要入库的商品按顺序扫描一遍,即可自动生成电脑软件金蝶里的【外购入库单】,避免仓管员往返电脑费时费事,和人工手工电脑录单效率低容易出错的问题,从而…

我在架构设计和代码开发中的一些常用原则

简介: 在日常的开发和设计过程中,大家对技术设计上的一些问题往往会面临很多的选择,不同的人会有不同的选择。本文介绍的就是我在工作中遇到的一些问题而总结和使用到的一些常用原则。 不管我一生中取得了多大的成功,其主要原因都…

坚持自主创新,凌波微步完成数千万A轮融资,加速半导体产业

随着5G、互联网、大数据、人工智能以及汽车电子等新技术、新产品的广泛应用,半导体产业已成为国民经济的基础性支撑产业。它是支撑经济社会发展,保障国家安全的战略性、基础性和先导性产业,其发展程度是衡量一个国家科技发展水平的核心指标之…

当程序员具备了抽象思维

简介: 若想捉大鱼,就得潜入深渊。深渊里的鱼更有力,也更纯净。硕大而抽象,且非常美丽。 作者:张建飞 若想捉大鱼,就得潜入深渊。深渊里的鱼更有力,也更纯净。硕大而抽象,且非常美丽…

平板电脑连接投影仪_交互式触控幼教白板如何与平板进行连接-微幼科技

现代智慧教学中离不开智能产品的辅助,电脑、平板就是其中之一。然而这两种电子产品的显示屏尺寸太小,并不能用于多人教学中。而55寸甚至上百寸幼教白板的出现,则可以解决多人互动教学的问题。那么,交互式触控幼教白板如何与平板进…

搭载了HarmonyOS 2的华为nova9,有哪些眼前一亮的功能?

9月23日,华为正式发布了nova9系列手机。作为年轻人的鸿蒙影像旗舰,nova9系列搭载了面向万物互联时代的HarmonyOS 2,沿袭nova品牌的年轻潮美基因,聚焦年轻人群的影像社交需求,在外观、影像、快充等多方面带来了创新突破…