出行365:依托分布式数据库,让出行无忧 | OceanBase案例

news2024/9/24 21:18:07

1722492078

*本文首发自“新华社·环球”杂志,作者张海鑫


每年的暑期旅游旺季,都会触发一轮轮的文旅消费的热潮,对于互联网出行服务行业而言,这既是一场盛大的狂欢,也是对其综合实力的严峻考验。

然而,自去年暑假起,出行365的副总裁兼首席技术官,张劲涛先生,心态已经从容了很多。“有了原生分布式数据库——OceanBase 之后,我们对平台的业务支撑能力是越来越有信心了。”

一、翻天覆地的十年

回溯至十数年前,节假日期间最令人困扰的莫过于购票难题,汽车站、代售点随处可见的排队长龙,有人为了买到一张票甚至要排上一个通宵。最绝望的是,好不容易排到了,却发现已经没票了,于是精心计划了很久的行程又不得不临时更改。

这样的场景,曾经是很多国人的共同记忆,不过互联网科技已经为这样的时代烦恼画上了句号。如今,临行前打开出行 365,输入出发地和目的地,选择出行日期,汽车票、城际巴士、火车票等票务信息便一目了然的出现在了手机屏幕上。如今的日常是十几年前的人们很难想象的。

十年前,张劲涛进入出行 365 这个初创企业之时,人们还并没有养成预约出行的习惯,培养市场和人们消费习惯的养成是一个相当漫长的过程,不仅考验着企业的耐力和资金能力,也考验着从业者们的定力。如今,张劲涛已经在互联网出行行业摸爬滚打了十年之久,出行 365 也已经成为在线汽车票务运营服务商排名第一、定制客运网络平台运营商排名第一的品牌。

出行行业比较特殊,不仅平日里需要 24 小时在线服务,每逢节假日才是真正的硬仗。“每到节假日人们集中出行之时,我们都会高度紧张,要为涌入平台的流量做好各种备案,确保大家的出行体验万无一失。”张劲涛说,“尤其是十一黄金周,我们要提前 40 多天就开始编写应急预案,列出一张可能出现的问题清单,针对每种问题还要进行应急演练。

“特别是 2023 年,随着国内旅游市场迅速回暖,从业务量上来看,五一期间就出现了往年十一那种业务量的陡然上升。人们的旅游方式也在不断翻新,我们的定制客运业务量每个月创一个新高,接送服务的增长量也翻了好几倍。”张劲涛说。

十年,张劲涛早已习惯了这样的生活,十年,国人的出行方式也已经发生了翻天覆地的改变。当互联网出行成为一种生活方式,大量的新增数据处理、历史数据的查询、实时的高并发,也给出行 365 带了新的挑战。

二、寻找“互联网皇冠上的明珠”

出行 365 每日交易量最高达到百万笔,而且是读写同时的,用以呈现各种业务的班次量更是达到上亿的规模,而在更新频次上,每秒可能更新上万行。随着出行 365 的业务量增长,给数据库带来了很大压力,Oracle 这种单库数据库的局限性逐渐显露出来。

如果说航空发动机是‘工业皇冠上的明珠’,那么数据库则可以类比为‘互联网皇冠上的明珠’。因为互联网行业应用层面的很多东西都可以追溯到数据库,可以说数据库的高度就决定了你业务的高度和技术的高度。”张劲涛告诉记者,这么多年来出行 365 技术团队做的很多工作实际上都是为了弥补数据库的局限,但还有很多想实现的服务迟迟无法拓展。

比如清分结算系统,“这是我们用于和供应商、分销商进行结算的系统。由于各个业务系统的数据全部都会集中到这个系统中,不仅数据量很大,还需要按业务进行各种维度的分析,而且常常是跨周期、跨纬度的分析,同时还要求实时的写入和聚合计算。针对一个供应商的一次计算就可能涉及上百万条的聚合数据,一旦数据量大了,聚合运算就变得非常非常慢,计算的压力非常大。所以很多时候,我们都要等业务量不大时才能运行。”张劲涛说。

为了解决这些问题,出行 365 曾设想过用数据仓库、数据库中间件 MyCat 等多种方案,但均效果不佳,选用新的数据库似乎成了不二之选。特别是 2022 年,公司决定对所有部署到用户的系统进行整合,将众多分散的小系统整合为一个大系统,意味着这个数据库需要承载非常大的数据量,并采用集中的 SaaS 模式为用户统一提供服务。不管是从成本的考虑还是数据量的考虑,Oracle 都已经无法满足发展需求。

但数据库迁移并非易事。“首先,它要能在语法上跟 Oracle 能够兼容,否则改动的工作量会很大,其次在性能上要能很好支持海量数据的复杂聚合计算需求,而且在事务支持上不打折扣。”从 2021 年开始,张劲涛很多功夫都花在了数据库的遴选上,但尝试了国内外很多数据库产品后仍未找到合适的。就在张劲涛惆怅不已之时,OceanBase 出现了。

通过测试后他惊讶地发现,一个 OceanBase 数据库就能同时满足上述两个需求。“在出行 365 评估的所有数据库中,OceanBase 是与 Oracle 兼容度最好的。而且在性能比对上,Oracle 和 OceanBase 没有明显差异,在某些场景 OceanBase 可能表现还更好一些。”张劲涛说,“此外,进行迁移测试时 OceanBase 也是最平滑的。而且还有完整的迁移方案,让我们非常容易地完成了数据库迁移,整个迁移过程不到 2 个小时。

三、站在数据库的肩膀上,轻松“远足”

2022 年下半年,出行 365 完成清分结算、云车站等数套系统的数据库升级之后,2023 年便迎来了旅游市场的一路“狂飙”,让张劲涛很满意的是,尽管面对流量的暴增,系统依然运行非常平稳。

2023 年 8 月 31 日,为期 62 天的铁路暑运结束。据中国旅游研究院数据显示,今年暑期全国国内旅游人数达 18.39 亿人次。“这么大的客流量,每一秒中可能都有很多人在同时发生购票行为,这带来的余票变化非常频繁,系统要随时更新,而且是全网更新,这就对数据库的要求很高。但在 OceanBase 的支撑下,整个暑期我们的系统没有遇到任何运维方面的麻烦。”张劲涛说。

此外,除了解决运维烦恼之外,数据库迁移之后的成本优势也非常明显。张劲涛介绍,由于 OceanBase 采用自研高级压缩存储引擎,数据存储压缩率达 80%,如原本需要存储 10TB 的费用,现在仅需存储 2TB 的费用,大幅度节约出行 365 的数据存储成本。

国产数据库带给我最大的感受就是,发现这个困扰我很多年的问题突然不见了,我们不必再为了迁就数据库而在业务功能上做平衡和取舍了。”张劲涛感慨,“放在十几年前,国产数据库的研发对我们来说似乎是一件遥不可及的事情。”因为他们这一代 IT 人,经历过太久国外技术“一统天下”的岁月了。

别说软件,那时候像手机、电脑等很多硬件产品大家都会首选国外的产品。但这些年,硬件方面国货已然崛起,并且逐渐在国际上占有一席之地。如今这样的逆袭故事也开始在软件领域上演了。”对此张劲涛十分期待。

如今从复杂的数据库运维工作中解脱出来张劲涛还想借助国产数据库开发更多新的业务。“现在我们有更多精力可以研究一些以前无法实现的计算量巨大的业务功能,比如我们的清分结算系统中通算功能等等。未来我们计划将更多的业务迁移到国产原生分布式数据库。”

如果说,出行 365 用互联网技术改变了国人的出行方式,让更多人能够轻松抵达“诗和远方”;那么对于像张劲涛这样的软件开发人员来说,数据库等根技术的创新也改变着他们的开发模式,让技术人员站在数据库的肩膀上轻松“远足”。


OceanBase 云数据库现已支持免费试用,现在申请,体验分布式数据库带来全新体验吧 ~

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

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

相关文章

Email发送接口安全性保障策略?如何优化?

Email发送接口的高级功能?怎么有效利用邮件API接口? Email发送接口的安全性对于防止数据泄露、滥发垃圾邮件和恶意攻击至关重要。AokSend将探讨Email发送接口的安全性保障策略,帮助开发者和企业确保其电子邮件通信的安全性和可靠性。 Email…

智能猫砂盆买错有什么危害?深度解析三款热门爆款产品!

作为一名家里还有小猫在等待的上班族,我们经常因为需要加班或频繁出差而忙碌得不可开交,导致我们很容易忽略猫咪的厕所环境和健康安全,每次急匆匆地出门,都发现自己似乎忘了给猫咪及时铲屎。但是大家要知道,不及时清理…

为人处世,“会说话”是一生的修行

职场上,常常存在这样一种现象:“会干活的,不如会说的。” 学会“好好说话”、“说正确的话”“说让人舒服的话”成为一生必须要面对的修行。 01 丰厚的学养,是“会说话”的根基。 同一句话,“会说话”的人&#xf…

XXXForm组件

效果展示 代码 XXXForm <template><div class"search-container"><el-form ref"formRef" class"form_is_hidden" :model"form" v-bind"formAttrs"><el-row :gutter"20" class"search…

一文带你快速了解——LVS负载均衡集群

前言&#xff1a; Internet的飞速发展给网络带宽和服务器带来巨大的挑战。从网络技术的发展来看&#xff0c;网络带宽的增长远高于处理器速度和内存访问速度的增长。对用硬件和软件方法实现高可伸缩、高可用网络服务的需求不断增长。针对高可伸缩、高可用网络服务的需求&#x…

.NET8使用VS2022打包Docker镜像

NET8使用VS2022打包Docker镜像 1. 项目中添加Docker支持文件2. 自定义镜像名称3. 发布Docker镜像3.1 安装Docker3.2 控制台切换到项目根目录,执行以下命令发布镜像 3.3 修改镜像名称4. 保存镜像到本地 1. 项目中添加Docker支持文件 2. 自定义镜像名称 项目文件PropertyGroup节…

软件功能测试步骤介绍,软件测试服务公司推荐

在当今软件开发日益复杂的环境中&#xff0c;软件功能测试显得尤为重要。功能测试是确保软件产品满足用户需求和规范要求的关键环节。它通过验证软件功能是否按预期运行&#xff0c;帮助发现潜在的问题&#xff0c;防止软件在上线后导致用户的不满及业务损失。随着市场竞争的加…

(el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程

Ⅰ、Element-plus 提供的DatePicker日期选择器组件与想要目标情况的对比&#xff1a; 1、Element-plus 提供DatePicker组件情况&#xff1a; 其一、Element-ui 自提供的DatePicker代码情况为(示例的代码)&#xff1a; // Element-plus 提供的组件代码: <template><e…

【多线程-从零开始-捌】代码案例2—阻塞队列

什么是阻塞队列 阻塞队里是在普通的队列&#xff08;先进先出队列&#xff09;基础上&#xff0c;做出了扩充 线程安全 标准库中原有的队列 Queue 和其子类&#xff0c;默认都是线程不安全的 具有阻塞特性 如果队列为空&#xff0c;进行出队列操作&#xff0c;此时就会出现阻…

Java代码生成器EasyCode

Java代码生成器EasyCode 一、安装插件二、连接数据库后右键Generator生成代码 一、安装插件 在 IntelliJ IDEA 的插件市场中搜索 EasyCode&#xff0c;然后安装该插件 二、连接数据库后右键Generator生成代码 勇敢面对挑战&#xff0c;成功从不会远离坚持者。坚持不懈的努力…

八股之Java集合

Java 集合&#xff0c;也叫作容器&#xff0c;主要是由两大接口派生而来&#xff1a;一个是 Collection接口&#xff0c;主要用于存放单一元素&#xff1b;另一个是 Map 接口&#xff0c;主要用于存放键值对。对于Collection 接口&#xff0c;下面又有三个主要的子接口&#xf…

MongoDB学习笔记(三)

使用Python操作MongoDB: 使用管理员用户&#xff1a;

Python —— 基础

目录 变量与引用 数据类型 赋值、深浅拷贝 控制流结构 逻辑操作符 is 与 dir() 关键字&#xff08;Python 3.11 &#xff09; https://www.cnblogs.com/qianfanwaer/p/14783204.html 变量与引用 变量是原来存储数据的一个标识符&#xff0c;可被看作是内存的一个位置&…

【学习笔记】Day 7

一、进度概述 1、DL-FWI基础入门培训笔记 2、inversionnet_train 试运行——未成功 二、详情 1、InversionNet: 深度学习实现的反演 InversionNet构建了一个具有编码器-解码器结构的卷积神经网络&#xff0c;以模拟地震数据与地下速度结构的对应关系。 &#xff08;一…

Python,我来啦!!!融合多个框架语言。。

基于上次发布CSDN的自己一些想法 上次&#xff0c;从一个道友手中购买了一份轮子代码&#xff0c;主要用到的技术就是pythonmysql或sqliteflask框架&#xff0c;这里我做了二次开发。 新的改变 这里&#xff0c;我对该代码进行了一些功能拓展与语法支持&#xff0c;除了原有…

【OpenCV C++20 学习笔记】仿射变换-warpAffine, getRotationMatrix2D

仿射变换 原理概述得到仿射变换的方法 APIgetAffineTransform()函数warpAffine()函数getRotationMatrix2D()函数 示例 原理 概述 仿射变换是矩阵乘法&#xff08;线性变换&#xff09;和向量加法的结合。它包含了&#xff1a; 旋转&#xff08;线性变换&#xff09;转换&…

【递归 + 记忆化搜索优化】力扣494. 目标和

给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 ‘’ 或 ‘-’ &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 &#xff1a; 例如&#xff0c;nums [2, 1] &#xff0c;可以在 2 之前添加 ‘’ &#xff0c;在 1 之前添加 ‘-…

立体连接模式下的传播与沟通:AI智能名片小程序的创新应用与深度剖析

摘要&#xff1a;在数字化浪潮的推动下&#xff0c;信息传播与沟通方式正经历着前所未有的变革。立体连接模式&#xff0c;作为这一变革的重要产物&#xff0c;通过整合物理空间、虚拟网络空间与社群心理空间的三维联动&#xff0c;实现了信息的深度传播与高效互动。AI智能名片…

Java新手指南:从菜鸟到编程大师的趣味之路-类和对象

这里是Themberfue 本章主要介绍的是Java最重要的面向对象&#xff08;OOP&#xff09;的基础 面向对象 Java是一门纯面向对象的语言&#xff0c;在面向对象的世界里&#xff0c;一切皆为对象。面向对象是解决问题的一种思想&#xff0c;主要依靠对象之间的交互完成一件事情。用…

MySQL --- 复合查询

目录 一、多表查询 二、自连接 三、子查询 1、单行子查询 2、多行子查询 3、多列子查询 4、在from后面使用子查询 四、合并查询 1、union 2、union all 五、内连接 六、外连接 1、左外连接 2、右外连接 一、多表查询 我们需要的数据往往会来自不同的表&#xf…