快手:数据库升级实践,实现PB级数据的高效管理|OceanBase案例
本文作者:胡玉龙,快手技术专家
快手在较初期采用了OceanBase 3.1版本成功替换了多个核心业务、数百套的MySQL集群。至2023年,快手的数据量已突破800TB大关,其中最大集群的数据量更是达到了数百TB级别。为此,快手将数据库系统升级至OceanBase 4.x版本,从而显著提升了业务的稳定性和运行效率。
本文将分享快手在OceanBase版本升级后的实际应用情况,期待与大家共同探讨和交流版本升级过程中的宝贵经验。
快手应用OceanBase 4.x版本现状
当前,快手的数据量已经增长到了PB级,从原来近200节点增长到了近300个节点。线上共部署9套OceanBase集群,其中数据量较大(20T以上)的集群已经升级4.2或4.3版本,还有一半数据量较小的集群(10T以下)仍在3.x版本。
从下图来看,4.x版本的数据似乎没有增长。但如果在3.x版本不升级的情况下,近一年随着业务的发展,数据量会增长1.5TB左右,数据节点也会提高一倍。这就体现了版本升级的妙处,OceanBase 4.x 版本相较于 3.x 版本能够更极致地压缩数据,节省存储空间,从而节约存储成本和机器成本。

版本升级经验交流
俗话说没有一款产品是万金油,在使用OceanBase 3.x版本时,业务人员希望将不完美的功能进行优化。例如非分区表,当业务量小时,单表很小也无需分区,随着业务量的增长,单分区表可能会把单机CPU打满,或者磁盘占用较满导致单副本变得庞大。此时OceanBase老版本不支持从单分区变为多分区,而4.x版本能够做到。同时,业务人员希望数据库的查询速度可以更快。OceanBase 4.3版本的行列混存特性,可以极大提升复杂查询的性能。
除解决业务需求外,我们升级OceanBase版本的重要因素就是跟随版本迭代,积累运维经验。
- 版本在快速迭代中,需要保持业务版本不落后太多。当我们决定升级时,距离OceanBase 4.2.1 LTS 版本推出已经过去 7 个多月,内核足够稳定,周边生态工具也在不断适配,我们可以放心升级。
- 从3.x版本升级到4.1版本再升级到4.2/4.3版本,我们都是提前在非核心业务场景验证新版本的稳定性和功能,为后续在核心场景使用积累经验。
下面以交易核对场景和支付场景介绍快手在升级OceanBase版本的过程和效果。
核心业务场景1:交易核对
电商业务作为快手最重要的一部分,其交易核对场景是我们的核心场景,要求数据库快、稳、抗压。
首先,目前交易核对场景的主库读写仍在MySQL中,为保证全局数据的一致性,避免MySQL落库失败导致的数据遗漏问题,我们在底层使用OceanBase进行全局核对。根据业务特性,要求我们在MySQL的binlog写入数据后,立即在OceanBase的全局查询中出现。也就是说业务要求返回延迟为毫秒级,否则会影响核对结果。
其次,业务对数据库有着强稳定性要求,例如,在大型直播时,流量迅速上涨百倍,如果数据库抖动,会导致大量的核对失败。因此,在交易核对场景下,数据库不仅需要再日常流量峰值时保持长期稳定,还需要在流量高峰时没有抖动。
再次,当数据量超百TB,单集群数据的单副本达到20TB左右时,随着单表数据的增大,对系统资源消耗会越来越多,进而影响数据库的响应时间。因此,读写请求峰值达到 QPS 百万级要求数据库足够平稳,响应时间不受影响。
下图是OCP监控的OceanBase在交易核对场景的表现,可以看到曲线比较平稳,几乎没有抖动,完全满足业务需求。

核心业务场景2:支付业务
在快手电商场景时常有查询数据的需求,比如商家、客服查订单收益,再比如支付网关聚合查询。目前业务数据量在 OceanBase 单集群达到百 TB 级别,同时单表数据在 10 TB 以上,聚合查询时还需要频繁加索引,如果单表DDL时间太久就会影响业务。
我们的支付业务特点是大量写入(10w/tps),伴随少量复杂查询。此前我们使用分布式数据库某DB来支撑支付业务,它使用range 分区,每个表自动分裂,在写数据量较大时,无法利用所有机器的性能,导致在流量较大的情况下性能较差,如果遇到流量高峰,就需要业务限流才能保证底层查询的稳定性。
在引入OceanBase 3.1版本后,使用 hash 分区,写入性能大幅提升;DDL 速度更快,至少能保证业务流量高峰时不再限流。升级到OceanBase 4.3版本后,成本收益进一步提升;复杂查询速度更快,基本在 10ms 内完成。我们支付业务中还有一些AP查询需求,在使用OceanBase 3.1版本时,只有行存,业务需要忍耐一定的查询延迟,OceanBase 4.3版本的行列混存特性使查询更实时,写入延迟在1ms 以内。
下图是支付业务在升级到OceanBase 4.x版本后的线上表现。

版本升级总结
总的来说,快手在升级OceanBase版本后成本变得更低,查询变得更快。以支付网关为例,在 3.1.x 版本,该集群规模为 65 节点,是线上环境规模最大的集群,升级前数据量 450TB。升级后机器规模缩减为 45 台,数据量压缩至 330TB。机器成本降低了31%,数据量比之前压缩了约27%。
在一些 TP + AP 场景下,最初我们使用OceanBase 3.1版本替换 MySQL,满足业务的HTAP 需求。升级为OceanBase 4.3版本后,更加稳定,性能更高,分析耗时更快。另外,在OceanBase 3.x 版本里面,我们需要将OceanBase数据同步到下游对接大数据生态,但受限于 Binlog 不支持所以操作起来不太方便。在OceanBase 4.2 版本, Binlog 兼容 了MySQL Binlog ,这个问题也得到了解决。
此外,我们也感受到了OceanBase生态工具侧的迭代升级。例如OCP、ODC等在2022年之前容易出现升级、扩容方面的问题,现在我们用OCP集群12台机器运维管理9套集群都没有出现扩缩容或监控告警相关的问题了。当OCP诊断到问题时能够自动解决,无需人工干预。不过有一个问题,对于业务来说,有时候排查问题就需要观察 p99、p999 监控信息,而当前 OCP 的监控看不到 p99、p999 监控线。从官方了解到,预计 11 月支持该功能。
整体来说我们使用 OceanBase 很顺畅,也积累了非常多的使用经验,有机会给大家分享更多 OceanBase使用姿势。
OceanBase 云数据库现已支持免费试用,现在申请,体验分布式数据库带来全新体验吧 ~
相关文章:
快手:数据库升级实践,实现PB级数据的高效管理|OceanBase案例
本文作者:胡玉龙,快手技术专家 快手在较初期采用了OceanBase 3.1版本成功替换了多个核心业务、数百套的MySQL集群。至2023年,快手的数据量已突破800TB大关,其中最大集群的数据量更是达到了数百TB级别。为此,快手将数据…...
基于Node.js+Express+MySQL+VUE实现的计算机毕业设计共享单车管理网站
单车信息选择骑行 骑行状态留言公告/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序 目录 功能图 界面展示 开发目标 开发背景意义 开发意义 开发目的 项目概述 技术选型与理由 系统设计与功能实现 项目可执行性分析 系统架构需求 性能需…...
人工智能辅助的神经康复
人工智能辅助的神经康复是通过应用人工智能(AI)技术来改善神经系统损伤患者的康复过程。此领域结合了深度学习、数据分析和机器人技术,旨在提升康复效果、个性化治疗方案和监测进展。以下是该领域的关键组成部分和应用: 1. 康复评…...
KKT实际运用 -MATLAB
FMINCON函数可以很方便的求出:fun:目标函数,即需要最小化的函数,输入参数为向量x,输出为标量f(x)。x0:初始点,即求解过程的起始点,可以是标量、向量或矩阵。A和b:线性不等…...
php在线相册
1、将静态页面效果完成 解压到www里 整个数据 暂时是错误的 建立连接密码为root 运行sql文件 右键根目录刷新 刷新后成功 开始 测试 如果需要上传照片,点击创建相册,选择上传文件,选择文件后退出 导入alumbenew2 2.提交表单方式 3.利用ph…...
Xcode手动安装SDK模拟器
1.下载SDK模拟器&Xcode SDK和Xcode官方下载地址 2.下载好后使用命令将SDK导入到Xcode中如下命令 注:我是在/Applications 目录下执行的命令,模拟其地址直接拖拽过来 sudo xcode-select -s Xcode.app xcodebuild -runFirstLaunch xcodebuild -imp…...
Docker安装consul + go使用consul + consul知识
1. 什么是服务注册和发现 假如这个产品已经在线上运行,有一天运营想搞一场促销活动,那么我们相对应的【用户服务】可能就要新开启三个微服务实例来支撑这场促销活动。而与此同时,作为苦逼程序员的你就只有手动去 API gateway 中添加新增的这…...
JWT 漏洞 - 学习手册
0x01:JWT 前导知识 0x0101:JWT 详解 0x02:JWT 漏洞介绍 0x0201:JWT 漏洞介绍 0x03:JWT 挖掘思路 JWT 漏洞挖掘思路 - JWT Payload 敏感信息泄露 备注:通过泄露的 JWT Payload 获取用户的敏感信息&#…...
HTML【知识改变命运】03font 字体标签
题目:在页面上显示"北京"两个字,字体为微软雅黑,颜色为红色,大小为40xp; font标签可以修饰字体的大小,颜色,和字体 属性:color颜色,face字体,size大…...
集师专属知识付费小程序搭建 心理咨询小程序搭建
一、产品简介 集师SaaS知识付费软件,为知识创业者或商家提供一站式内容交付解决方案,助力商家搭建集品牌传播、商业变现和用户运营于一体的线上知识服务系统,覆盖全渠道经营场景,占据每个流量入口,使流量变现快速高效…...
https://www.aitoolpath.com/ 一个工具数据库,目前储存了有2000+各种工具。每日更新
AI 工具爆炸?别怕,这个网站帮你整理好了! 哇塞,兄弟们!AI 时代真的来了!现在各种 AI 工具跟雨后春笋似的,噌噌噌地往外冒。AI 写作、AI 绘画、AI 代码生成……简直是要逆天啊! 可是…...
科技的成就(六十三)
583、八小时工作制 最先提出这种理念的人竟然也是一名企业家,而且还是一名空想社会主义者。这名叫做罗伯特欧文的英国人,也凭借先进的人本管理理念成为了现代人事管理之父。 584、SDN(软件定义网络) "SDN(软件定…...
浅谈抗量子密码学:保护未来的数字安全
一、引言 随着量子计算机技术的发展,传统的加密算法面临前所未有的挑战。量子计算机利用量子位(qubits)的特性,能够在理论上比经典计算机更快地破解现有的加密系统。为了应对这一威胁,研究者们正在开发所谓的“抗量子…...
10款物联网开源嵌入式操作系统对比分析
摘要 本文对目前市场上广受欢迎的10款物联网开源嵌入式操作系统进行了深度对比分析,包括Huawei LiteOS、RT-Thread、AliOS Things等。通过探讨这些操作系统的实时性、可扩展性、特点、运行要求、开发社区活跃度和应用领域等方面,帮助开发者更好地理解它…...
Elasticsearch深度攻略:核心概念与实践应用
目录 一、Elasticsearch简介1、Elasticsearch是什么2、Elasticsearch的应用场景3、Elasticsearch的核心概念 二、Elasticsearch安装与配置1、安装Elasticsearch(1)系统要求(2)下载Elasticsearch(3)解压安装…...
TLS详解
什么是TLS TLS(Transport Layer Security)传输层安全性协议 ,它的前身是SSL(Secure Sockets Layer)安全套接层,是一个被应用程序用来在网络中安全的通讯协议, 防止电子邮件、网页、消息以及其他协议被篡改或是窃听。是用来替代SSL的…...
正则表达式中的特殊字符
正则表达式中的特殊字符 字符类预定义字符类量词锚点分组和捕获选择、分支和条件反义和否定转义字符示例 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 在正则表达式中,有许…...
EP42 公告详情页
文件路径: E:/homework/uniappv3tswallpaper/api/apis.js 先添加相应的api。 import {request } from "/utils/requset.js"export function apiGetBanner() {return request({url: "/homeBanner"}) } export function apiGetDayRandom() {ret…...
游戏找不到xinput1_3.dll的原因及解决方法
1. xinput1_3.dll 基本信息 1.1 文件名 xinput1_3.dll 是一个动态链接库(DLL)文件,它属于 Microsoft DirectX for Windows 的一部分。这个文件主要负责处理与 Xbox 360 控制器和其他兼容 XInput 标准的游戏手柄相关的输入信号,确…...
防反接电路设计
方案1 串联二极管, 优点:成本低、设计简单 缺点:损耗大,P ui 方案2 串联自恢复保险丝 当电源反接的时候,D4导通,F2超过跳闸带你留,就会断开,从而保护了后级电路 方案3 H桥电路…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...
