T3 出行:网约车全栈分布式数据库升级实践

现今,网约车已成为民众日常出行不可或缺的选择。伴随“互联网+出行”模式的快速推进,庞大的出行数据应运而生,如同构建了城市交通系统的数字神经脉络。与此同时,对高效数据存储与深入数据分析的需求也在持续攀升。

T3 出行于2019年应运而生,是由一汽集团、东风汽车和长安汽车这三大中央企业联手创建的智能出行服务平台。历经五年的蓬勃发展,T3 出行的日订单峰值已跃升至300万以上。随着T3 出行业务的急剧扩张,一个稳定可靠、高性能且安全的数据库系统变得至关重要。在全面评估性能、成本等各项因素后,T3 出行决定采用OB Cloud 作为数据库技术的坚强后盾。

1、T3出行的数据库挑战:海量数据下的性能瓶颈

T3 出行研发总监高建丰经常对团队成员强调:数据库稳,则系统稳。如果没有一个稳定的数据库系统,就不可能有一个稳定的交易系统。”

T3 出行最初将其数据库部署在 MySQL 上。然而,随着订单量的快速增长,传统集中式数据库面临的挑战逐渐显现。高建丰分享道,尽管 MySQL 能够支持很高的 KPS(每秒查询次数),但其存储的数据量却非常有限。当数据量达到几百万条时,系统便接近其上限,从而导致性能下降和内存消耗增加等问题。

为了扩容,最常见的方式就是分库分表,但分库分表也存在技术局限性。首先,查询性能、灵活性不强。通常只能按照订单、司机或乘客等单个特定维度查询数据,不能进行多维度的查询。其次,数据库的水平扩展困难,且容易造成资源浪费。根据 T3 出行的业务画像,波峰波谷明显,非早晚高峰时段,大量的 MySQL 资源日常闲置;而早晚高峰时段,MySQL 连接数与规格绑定,数量有限,容易出现资源碎片化,导致数据库使用成本不断增加。

为了解决扩容问题,T3 出行的研发团队采用了分库分表策略,但这一方法的技术局限性也很快显现。

  • 首先,分库分表后的查询性能和灵活性较差,通常只能按照订单、司机或乘客等单一特定维度进行查询,难以支持多维度的复杂查询。
  • 其次,数据库的水平扩展变得更加困难。早晚高峰时段,MySQL连接数与规格绑定,容易出现资源碎片化,导致数据库使用成本不断增加,而在非高峰时段,大量 MySQL 资源处于闲置状态,造成资源浪费。
  • 另外,即便分了八库八表,海量数据存储困难的问题依然存在,三四年前的历史数据如何存储?有人提出使用 MySQL+HBase+MongoDB 等解决方案支撑数据存储与查询。但一方案也带了来新的问题:技术栈众多。目前,T3 出行系统运行着的 TP 和 AP 类数据库近 20 个。

“大部分运维同学是很崩溃的。”高建丰说到:“近 20 个数据库需要耗费大量的资源和人力去维护,而且也没有哪个运维同学对这 20 个技术栈都非常熟悉。”

而更大问题在于,数据从 TP 数据库同步到 AP 数据库,涉及数据复制、提取、清洗等环节,每一次数据同步都有可能引起数据延迟或丢失,难以实现 100% 的完美迁移。

为了保障系统高可用,T3 出行采用双云双地图战略,交易系统部署在阿里云上,大数据系统部署在腾讯云上,利用多云架构分散风险。但云上系统如何快速切换,数据如何流转是 T3 出行数据库团队不得不面对的课题。

2、海量数据最优解:一体化云数据库OB Cloud

基于上述问题,T3 出行开始寻求新的数据解决方案。

高建丰认为,满足 T3 出行海量数据的数据库,应该满足四大条件:

  • MySQL 数据库可以快速、平滑地迁移,不需要投入太多人力资源,也无需修改代码,要对业务层无感知。
  • 替换之后,性能需要有所提升。
  • 成本上,需要通过数据压缩、CPU 资源利用等多种角度降低数据库成本。
  • 运维层面,要减轻运维团队的工作量。

2023 年 6 月,T3 出行开始接触 OB Cloud,并进行了大量测试。在性能、成本、迁移难度、运维等多个层面的测试结果都远超预期,最终,T3 出行选择 OB Cloud 作为数据库底座。

一开始,T3 出行将司机任务、订单监控、虚拟号、开放平台等部分非核心业务放在作为试点,将数据量较大的单库单表场景迁移至 OB Cloud 上。切换过程非常顺利,且运行稳定,在兼容性、成本与性能等方面表现良好。高建丰对试点运行的结果做了以下几点总结:

  • OB Cloud 完善的周边生态,让迁移过程十分顺利,无代码适配成本。
  • OB Cloud 与阿里云、腾讯云等多种云平台灵活对接,云上数据流转自由,有效支撑 T3 出行的双云双地图战略。
  • 基于 LSM-Tree 存储引擎,OB Cloud 可以极大压缩数据存储空间,解决了 T3 出行未来几年的数据存储难题。
  • OB Cloud 原生分布式能力可平滑扩展,在早晚高峰的高并发场景下自动扩容,且在司机端、乘客端无感知。
  • OB Cloud 采用多副本多活策略,能有效提高资源计算密度,业务高峰时段也保证系统性能。 
  • 通过 HTAP+多模一体化,统一管理 20 多种技术栈,不但提升了系统性能,运维同学的压力也大大减轻。

2024 年年初,T3 出行开始将订单、结算、支付、风控、营销等核心业务系统逐步都迁移至 OB Cloud。截至目前,T3 出行超过 50% 的业务平稳运行在 OB Cloud 之上,预计在 2025 年年初,实现所有系统的切换。

在降本层面,以会员业务为例,一开始,T3 出行对会员业务进行八库八表的拆分,后来迁移至 OB Cloud 采用三副本方式,以单库单表的形式支撑业务。切换之后,会员业务的成本降低超过 50%。全部业务切换至 OB Cloud 后,预计 RDS for MySQL 共 400+ 个实例,缩减至 25 个 OceanBase 集群,大幅度降低业务系统的数据存储规模,存储空间减少 80% 以上。得益于存储压缩技术和 CPU 资源利用率提升,整体数据库成本缩减 30%。

“因为我们使用 OB Cloud 的时间并不长,在一开始设计时也做了特别多的冗余。待业务平稳运行之后,降本会更加明显。”高建丰介绍说。

使用 OB Cloud 后,在早晚高峰的高并发场景下,T3 出行的数据库性能提升 75%,大表查询性能提升 12%,写入性能提升 90%,终端的司机和乘客在使用时可明显感知到业务的响应速度提升,整体的使用体验也有了质的提升。

此外,OB Cloud 稳定性非常高,T3 核心交易系统搭载 OB Cloud 平稳运行,OceanBase 驻场人员运维和响应的速度非常快,一年来无任何生产事故。得益于 OceanBase 原生金融级高可用,T3 出行所有业务均实现机房级故障 RPO=0 的能力。

3、TP+AP、多模+AI,借助 OB Cloud 拓展业务更多可能

目前,T3 出行主要用 OB Cloud 替换了 MySQL 的场景,未来考虑替换 HBase、Redis 等场景,用 OB Cloud 统一管理,更大程度简化技术栈,减轻运维压力。

TP 与 AP 割裂的两个系统,对人力资源和机器资源造成了极大的浪费,借助 OB Cloud 的 HTAP 能力,分析不分数据报表,进一步扩展了业务的边界。

另外,T3 出行还考虑基于 OB Cloud 进一步探索多云部署,T3 目前面临的双活问题主要是网络问题、应用问题和数据问题。网络和应用双活容易实现,底层的数据双活可以借助 OB Cloud 来支持,屏蔽不同云厂商之间的底层差异,实现跨云主备库、双活能力,探索业务跨云灾备能力的实践。 


OceanBase  现已支持 365天 免费试用,点击立即开启 >> 

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

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

相关文章

区块链技术在供应链管理中的应用与创新

在当今全球化的商业环境中,供应链管理的复杂性与日俱增。从原材料采购到最终产品交付,涉及众多环节和参与者,信息的透明度、准确性和安全性至关重要。区块链技术的出现,为供应链管理带来了全新的解决方案,正在逐步改变…

蓝桥每日打卡--打家劫舍4

#蓝桥#JAVA#打家劫舍4 题目描述 沿街有一排连续的房屋。每间房屋内都藏有一定的现金。现在有一位小偷计划从这些房屋中窃取现金。 由于相邻的房屋装有相互连通的防盗系统,所以小偷 不会窃取相邻的房屋 。 小偷的 窃取能力 定义为他在窃取过程中能从单间房屋中窃…

c#难点整理

1.何为托管代码,何为非托管代码 托管代码就是.net框架下的代码 非托管代码,就是非.net框架下的代码 2.委托的关键知识点 将方法作为参数进行传递 3.多维数组 4.锯齿数组 5.多播委托的使用 6.is运算符 相当于逻辑运算符是 7.as 起到转换的作用 8.可…

Nginx代理本机的443到本机的8080端口

1. 准备工作 确认已生成 IP 的 HTTPS 证书 假设你已通过 mkcert 生成证书(如 192.168.199.191.pem 和 192.168.199.191-key.pem),并已安装 CA 证书(运行过 mkcert -install)。 Nginx 安装 • 若未安装 Nginx&#…

善用批处理的for命令倍增效率(附彩蛋:windows官方bug)

前言 在我们工作中,如果使用Windows系统,善用批处理命令,特别是在批量的文件处理,文本处理时能帮助我们极大地提升工作效率,起到事半功倍的效果! 但很多同学,对批处理的使用更多还停留在可以将多个command命令组合到一起执行,省去重复敲命令和等待的时间。这个其实只…

数据结构之栈的2种实现方式(顺序栈+链栈,附带C语言完整实现源码)

对于逻辑关系为“一对一”的数据,除了用顺序表和链表存储外,还可以用栈结构存储。 栈是一种“特殊”的线性存储结构,它的特殊之处体现在以下两个地方: 1、元素进栈和出栈的操作只能从一端完成,另一端是封闭的&#xf…

Camera2 API拍照失败问题实录:从错误码到格式转换的排坑之旅

一、问题背景 在开发基于Camera2 API的相机应用时,我们遇到了一个棘手的问题:预览功能在所有设备上工作正常,但在某特定安卓设备上点击拍照按钮后无任何响应。值得注意的是,使用旧版Camera API时该设备可以正常拍照。本文记录了完…

Jmeter旧版本如何下载

1.Jmeter最新版本下载位置 https://jmeter.apache.org/download_jmeter.cgi2.Jmeter旧版本下载位置 https://archive.apache.org/dist/jmeter/binaries稳定版本:5.4.1

css-grid布局

文章目录 1、布局2、网格轨道3、间距Gap4、网格线5、网格别名 当一个 HTML 元素将 display 属性设置为 grid 或 inline-grid 后,它就变成了一个网格容器,这个元素的所有直系子元素将成为网格元素。 1、布局 启用grid布局类似与flex布局,不过g…

SolidWorks使用显卡教程

操作步骤: 打开注册表编辑器 按下键盘上的 Win R 组合键,输入 regedit 并按回车键,打开注册表编辑器。 导航到显卡信息路径 在注册表中依次展开以下路径: plaintext HKEY_CURRENT_USER\Software\SolidWorks\SOLIDWORKS 2021\Per…

【C++11】左值引用、右值引用、移动语义和完美转发

🦄个人主页:修修修也 🎏所属专栏:C ⚙️操作环境:Visual Studio 2022 目录 📌左值引用和右值引用 🎏左值和左值引用 🎏右值和右值引用 📌左值引用和右值引用比较 🎏左值引用 🎏右值…

麒麟系列Linux发行版探秘

以下内容摘自《银河麒麟操作系统进阶应用》一书。 银河麒麟操作系统(Kylin) 银河麒麟(Kylin)操作系统是中国自主研发的一款基于Linux内核的操作系统。它的发展历程可以追溯到2002年,最初由国防科技大学主导研发&…

【机密计算顶会解读】11:ACAI——使用 Arm 机密计算架构保护加速器执行

导读:本文介绍ACAI,其构建一个基于CCA的解决方案,使得机密虚拟机能够安全地使用加速器,同时保持与现有应用程序的兼容性和安全性,能够实现对加速器的安全访问。 原文链接:ACAI: Protecting Accelerator Ex…

第一天 UnityShader的结构

Shader初学者的学习笔记 第一天 Unity Shader的结构 文章目录 Shader初学者的学习笔记前言一、Unity Shader结构二、Unity Shader结构解析① Properties② Tags③ RenderSetup(可选状态)④ Name⑤ [Tags]⑥ [RenderSetup]⑦ 顶点着色器和片元着色器的代码 (Unity最聪明的孩子)…

VL开源模型实现文本生成图片

一、 基础知识 根据描述生成图片的视觉-语言模型(Vision-Language Models, VL 模型)是近年来多模态生成领域的热点研究方向。这些模型能够根据自然语言描述生成高质量的图像,广泛应用于艺术创作、设计辅助、虚拟场景构建等领域。 1 根据描述…

【Java SE】抽象类/方法、模板设计模式

目录 1.抽象类/方法 1.1 基本介绍 1.2 语法格式 1.3 使用细节 2. 模板设计模式(抽象类使用场景) 2.1 基本介绍 2.2 具体例子 1.抽象类/方法 1.1 基本介绍 ① 当父类的某些方法,需要声明,但是又不确定如何实现时&#xff…

【人工智能】LM Studio 的 GPU 加速:释放大模型推理潜能的极致优化

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着大语言模型(LLM)的广泛应用,其推理效率成为限制性能的关键瓶颈。LM Studio 作为一个轻量级机器学习框架,通过 GPU 加速显著提升了大…

深度学习:从零开始的DeepSeek-R1-Distill有监督微调训练实战(SFT)

原文链接:从零开始的DeepSeek微调训练实战(SFT) 微调参考示例:由unsloth官方提供https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen2.5_(7B)-Alpaca.ipynbhttps://colab.research.google.com/git…

流畅如丝:利用requestAnimationFrame优化你的Web动画体验

requestAnimationFrame 是前端开发中用于优化动画性能的 API。它允许浏览器在下一次重绘之前执行指定的回调函数,通常用于实现平滑的动画效果。 1.作用 优化性能:requestAnimationFrame 会根据浏览器的刷新率(通常是 60Hz,即每秒…

【pytest框架源码分析五】pytest插件的注册流程

前文介绍到pytest整体是运用插件来实现其运行流程的。这里仔细介绍下具体过程。 首先进入main方法 def main(args: list[str] | os.PathLike[str] | None None,plugins: Sequence[str | _PluggyPlugin] | None None, ) -> int | ExitCode:"""Perform an i…