当前位置: 首页 > news >正文

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

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 云数据库现已支持免费试用,现在申请,体验分布式数据库带来全新体验吧 ~

相关文章:

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

*本文首发自“新华社环球”杂志,作者张海鑫 每年的暑期旅游旺季,都会触发一轮轮的文旅消费的热潮,对于互联网出行服务行业而言,这既是一场盛大的狂欢,也是对其综合实力的严峻考验。 然而,自去年暑假起&…...

【C语言】位段详解

🦄个人主页:小米里的大麦-CSDN博客 🎏所属专栏:https://blog.csdn.net/huangcancan666/category_12718530.html 🎁代码托管:黄灿灿 (huang-cancan-xbc) - Gitee.com ⚙️操作环境:Visual Studio 2022 目录 一、什么是位段? 二、…...

LVS集群实验

NAT模式 本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发RIP和DIP应在同一个IP网络,且应使用私网地址:RS的网关要指向DIP请求报文和响应报文都必须经由Direclor转发,Direclor易于成为系统瓶…...

在 Spring Boot 中使用适配器模式实现支付网关的统一接口

引言 在许多电子商务系统中,集成多个支付网关是常见的需求。不同的支付网关有着不同的接口和实现细节。适配器模式可以帮助我们以一种灵活的方式实现这些不同的支付网关接口。 适配器模式简介 适配器模式将一个类的接口转换为客户期望的另一个接口。适配器模式使…...

【书生·浦语大模型实战营】第三期 入门岛作业

入门岛作业 Linux闯关任务:完成 SSH 连接与端口映射并运行 hello_world.py。配置vscode作业内容 可选任务1:将Linux基础命令在开发机上完成一遍作业内容 可选任务 2:使用 VSCODE 远程连接开发机并创建一个conda环境作业内容 可选任务 3&#…...

Redis的String类型常用命令总结

1. set 设置一个键的值。 set key value示例: set username "alice"2. get 获取一个键的值。 get key示例: get username3. getset 设置键的值,并返回键的旧值。 getset key value示例: getset username "…...

河南萌新联赛2024第(四)场:河南理工大学

A 思路: B 思路:有一种贪心的写法,将整个数组排序以后比较两个相邻数的同或值,取 m a x max max,不会证明 int th(int x, int y, int z) {int res 0;for (int i z - 1; i > 0; i --) {int dx (x >> i &…...

Linux中临时使用账号提权进行业务操作

普通账号提权 su:永久提权 Switching users with su sudo:临时提权 Running commands as root with sudo 1)su切换账号 需要对方的密码 示例:切换到超级管理员 su - root 建议用-这个 su root 普通用户需要执行特殊指令&…...

lwip 3. 网线拔掉后 lwip_recvfrom不能返回

当网线被拔掉后,‌LWIP的lwip_recvfrom函数无法返回,‌这通常意味着网络连接已经断开,‌而LWIP没有自动检测到这种断开并进行相应的处理。具体卡在这个地方: ret xQueueReceive(mbox->mbx, &(*msg), portMAX_DELAY); //具…...

Linux环境安装Docker Engine

Docker是一个开源的应用容器引擎,由Go语言开发,基于Linux内核技术。Docker通过将应用及其依赖打包到可移植的容器中,实现了应用的快速部署和高效管理。Docker容器具有轻量级、快速启动、可移植性强等特点,能够显著提升资源利用率和…...

大厂面试题分享

大厂面试题分享 Redis持久化方式AOF优缺点RDB优缺点 如何保证Redis和Myql的一致性索引下推输入url到浏览器发生了什么ReentranLock底层原理SpringBoot 的启动流程 Redis持久化方式 Redis提供了两种主要的持久化机制,分别是AOF(Append-Only File&#xf…...

FPGA面试问题整理

1. 逻辑设计中竞争与冒险概念,如何识别和消除? 竞争:在组合逻辑电路中,信号经过多条路径到达输出端,每条路径经过的逻辑门不同存在时差,在信号变化的瞬间存在先后顺序。这种现象叫竞争。 冒险:由…...

3Done学习笔记

一、基本操作 1、旋转视角 使用左下角立方体选择; 右键可以拖动视角; 中间滑轮按住拖动整个舞台界面。 2、平移和旋转 右键选择移动,有两种方式。 第一种选择起始点,按照起始点位置移动到终止点(边、角、中心点…...

AI学习指南深度学习篇-卷积层详解

AI学习指南深度学习篇-卷积层详解 一、引言 随着人工智能技术的不断发展,深度学习作为人工智能领域的热门分支之一,正在逐渐成为各个领域的核心技术。而在深度学习中,卷积神经网络(Convolutional Neural Network,CNN…...

2024年TI杯E题-三子棋游戏装置方案分享-jdk123团队-第二弹 手搓机械臂

第一弹赛题的选择与前期方案的准备 opencv调用摄像头bug的解决 机械臂的组装 采用三个舵机,组成一个三自由度的机械臂。 并且利用电磁吸盘的方式,完成对棋子的抓取工作,后面的事实证明,在预算不足的情况下,队友手搓…...

如何在Java、C、Ruby语言中使用Newscatcher API

Newscatcher 世界实时新闻聚合API 一款强大的数据服务工具,它通过先进的网络爬虫技术,实时从全球超过70,000个新闻源聚合新闻内容。这个API能够提供全面、多角度的新闻报道,包括但不限于标题、作者、发布日期、全文内容以及媒体资源链接。它使…...

集合: Collection的成员方法和相关实现类

Collection: - List(有序【指的是存储和取出的顺序是一致的】且可以发生重复,且有索引的概念) - ArrayList: 底层数据结构是数组,查询快,增删慢,线程不安全的,效率高。 - …...

过滤器与监听器:深入了解 Java Web 开发中的核心概念

在 Java Web 开发中,过滤器(Filter)和监听器(Listener)是两个重要的组件,它们帮助开发者在请求处理的各个阶段进行预处理和后处理。这篇博客将深入探讨这两个概念,并展示它们如何在实际应用中发…...

【Linux学习】动静态库从原理到制作

🍑个人主页:Jupiter. 🚀 所属专栏:Linux从入门到进阶 欢迎大家点赞收藏评论😊 目录 🍑动静态库🐟动静态库的制作与使用🚀生成静态库🔒生成动态库 🦌动态库的查…...

WPF篇(10)-Label标签+TextBlock文字块+TextBox文本框+RichTextBox富文本框

Label标签 Label控件继承于ContentControl控件,它是一个文本标签,如果您想修改它的标签内容,请设置Content属性。我们曾提过ContentControl的Content属性是object类型,意味着Label的Content也是可以设置为任意的引用类型的。 案…...

JavaFX对话框控件-ChoiceDialog

JavaFX对话框控件-ChoiceDialog 常用属性titlecontentTextinitOwnergraphicheaderTextdefaultValuechoicesdialogPane 常用事件显示事件setOnShowing显示事件setOnShown弹框按钮点击 综合案例自定义下拉框内容 与Alert大部分功能类似按钮不可以自定义多一个下拉框 常用属性 …...

一文了解BTC中的二层协议中Nervos network,CKB,RGB++,UTXO stack 之间的关系

注:该内容不构成投资建议,有些内容摘抄其他地方,如侵权,请联系删除。 Nervos network Nervos Network 是一个开源的区块链生态项目,该项目提供一套解决方案来应对区块链扩展性和互操作性的问题。 Nervos Network 成立…...

Oracle(47)如何创建和使用集合?

在PL/SQL中,集合(Collection)是一种复合数据类型,用于存储一组相关的数据项。集合主要有三种类型:关联数组(Associative Arrays)、嵌套表(Nested Tables)和可变数组&…...

SpringIOC和SpringAOC

lombok插件 XML<!-- 加载资源文件 --><context:property-placeholder location"classpath:jdbc.properties"></context:property-placeholder><!-- 注入数据源 --><bean id"dataSource" class"com.mchange.v2.c3p0.ComboP…...

static关键字详解

文章目录 static使用示例static底层原理静态初始化顺序静态与线程安全 static static是Java中的一个关键字&#xff0c;用于定义类级别的成员&#xff0c;类级别的成员是指那些属于整个类&#xff0c;而不是特定对象实例的成员。在Java中&#xff0c;类级别的成员包括静态变量…...

使用 Java RestClient 与 Elasticsearch 进行索引管理的示例

文章目录 准备工作测试连接创建索引查询索引是否存在删除索引总结 在这篇博客中&#xff0c;我将和大家分享如何使用 Java RestClient 与 Elasticsearch 进行简单的索引管理操作。如果你在开发过程中需要对海量数据进行高效搜索和分析&#xff0c;Elasticsearch 可能是个不错的…...

编程-设计模式 10:外观模式

设计模式 10&#xff1a;外观模式 定义与目的 定义&#xff1a;外观模式&#xff08;Facade Pattern&#xff09;提供了一个统一的接口&#xff0c;用来访问子系统中的一群接口。它定义了一个高层接口&#xff0c;让子系统更容易使用。目的&#xff1a;简化复杂的子系统的使用…...

非范型ArrayList和泛型List<T>

ArrayList 是 C# 中的一个非泛型集合类&#xff0c;它属于 System.Collections 命名空间。它提供了动态数组的功能&#xff0c;允许你在运行时添加、删除和访问元素。然而&#xff0c;需要注意的是&#xff0c;ArrayList 并不是类型安全的&#xff0c;因为你可以向其中添加任何…...

魔众文库系统v7.0.0版本推荐店铺功能,管理菜单逻辑优化

推荐店铺功能&#xff0c;管理菜单逻辑优化 [新功能] RandomImageProvider 逻辑升级重构&#xff0c;支持更丰富的随机图片生成 [新功能] 资源篮订单参数字段 [新功能] 首页推荐店铺功能&#xff0c;需要在后台 文库系统 → 文库店铺 开启推荐 [系统优化] Grid 快捷编辑请求…...

03、流程控制语句

01、位运算符 一、位运算符:是针对二进制数据(补码)的运算。(0看成false&#xff0c;1看成true) &:按位与——求出两个数字对应的二进制&#xff0c;有0则0 | :按位或——求出两个数字对应的二进制&#xff0c;有1则1 ^ :按位异或 ——求出两个数字对应的二进制&#xff0c…...