B 站数据库负责人赵月顺:助力海内外业务增长,百套 TiDB 的选型与运维实战

导读

B 站对 TiDB 的应用已相当广泛,被应用在了 包括视频观看、一键三连、发送弹幕、撰写评论、阅读漫画以及视频后端的存储等场景, 目前拥有近 100 套集群。

本文由 B 站数据库负责人赵月顺撰写, 详细介绍了 B 站面临业务增长选择 TiDB 的原因,以及采用 TiDB 后的部署架构、容灾实现、运维经验和未来规划


TiDB 在 B 站的使用场景和部署架构介绍

B 站的 TiDB 集群规模已达到 100 多套,计算节点超过 2000 个,存储节点超过 800 个。TiDB 的应用场景非常广泛,包括视频观看、一键三连、发送弹幕、撰写评论、阅读漫画以及视频后端的存储等。
在这里插入图片描述

B 站的 TiDB 部署采取了存算分离的策略,计算节点被部署在容器中 ,这种做法的优势在于能够充分发挥容器化管理无状态服务达到水平弹性拓展能力,允许根据需求随时对计算节点进行扩展或缩减,整个过程仅需一次服务发版,有效提升了效率与灵活性。 存储节点则继续部署在物理机上 ,这也是 B 站拥有超过 2000 个计算节点和 800 个存储节点的原因。

目前,B 站使用的是大约 3T 容量的 NVMe 硬盘。在存算分离架构下,扩容策略分为两种情况:

  1. 计算节点的扩容 :当计算节点面临性能瓶颈时,B 站会利用云平台的 HPA 功能。通过设定一个阈值,一旦负载达到该阈值,系统便会自动进行水平扩展,确保计算资源能够满足业务需求。
  2. 存储节点的扩容 :存储节点的扩容主要依赖于运营监控和报警机制。当存储容量接近预设的预警线时,运营团队将收到报警,随后根据实际情况进行评估,并决定是否需要进行扩容,以确保数据存储的安全性和可靠性。

海内外业务技术侧的挑战

B 站自 2018 年起大规模采用 TiDB,主要原因是那一年 B 站业务经历的空前增长。用户量每个季度的增幅达到了 70%至 80%,这一增长速度对存储基础设施构成了巨大压力。业务数据量迅速增加,单表记录突破百亿条,每秒查询量(QPS)超过万次,单机存储已无法满足业务增长的需求。

当时,线上存在千亿级别的数据表,且数据规模持续扩大。面对如此庞大的数据增长,需要一个有效的解决方案。

B 站使用 TiDB 的理由

经过对市场上的数据库存储解决方案的调研, 发现将 MySQL 迁移至 TiDB 的成本相对较低 ,这为 B 站节省了大量成本和资源。同时, B 站对数据强一致性有着严格要求 ,而当时没有中间件解决方案能够同时满足大规模数据增长和 MySQL 兼容性的需求,TiDB 成为了唯一能够满足这些条件的解决方案,为 B 站的业务发展提供了坚实的分布式数据库存储支持。转向 TiDB 后,B 站的单集群存储容量已超过 80TB。

具体而言,选择 TiDB 作为数据库的基础支撑主要出于以下考虑:

在这里插入图片描述

  1. 兼容性 :鉴于 MySQL 在业务系统中的核心地位,TiDB 与 MySQL 的高度兼容性显得尤为重要。这种兼容性意味着现有的 MySQL 数据库可以较为轻松地迁移至 TiDB,从而降低了迁移风险和成本。同时,这种兼容性也便利了开发人员对 TiDB 的快速适应和使用,无需投入大量时间学习新的数据库操作和语法。
  2. 存算分离的架构 :相较于传统数据库架构中存储和计算的紧密耦合,TiDB 的架构允许独立扩展存储和计算资源,根据业务需求灵活调整,提升了系统性能和可扩展性,同时简化了运维工作,降低了成本。
  3. 社区贡献 :TiDB 拥有一个活跃的社区,成员们积极贡献代码、解答问题并进行技术交流。社区提供的详尽文档和教程加速了用户对 TiDB 的了解和掌握,而社区的反馈和建议也推动了 TiDB 的持续改进和优化。
  4. 可靠性 :TiDB 满足了分布式数据库对数据可靠性的高要求。基于 Raft 协议的 TiDB 能够在节点故障和网络延迟等异常情况下,确保数据的强一致性和可靠性,为业务提供了坚实的支持。

TiDB 在大规模数据容灾场景的优势

选择 TiDB 的另外一个重要收获是,在大规模容灾恢复方面,TiDB 因其灵活的架构设计、高可用性以及对多活部署的支持上有着明显的优势。

存算分离的架构设计使得计算和存储资源能够灵活地在线扩展或缩减,整个过程对业务开发以及运维人员透明,简化了大规模环境下的资源管理和开发工作将至 0 成本。 TiDB 通过多副本和 Multi-Raft 协议确保数据在不同机房、机架和机器间的高可用性,实现快速自愈故障恢复(RTO <= 30s)和数据零丢失(RPO = 0)。此外,TiDB 支持可用区多地多活部署,通过 TiDB-binlog 进行数据同步,增强了跨区域的灾难恢复能力,确保业务连续性和数据强一致性。这些特性共同构成了 TiDB 强大的高可用自愈容灾优势。

对于 B 站而言,目前尚未实现两地三中心的布局。2023 年,B 站进行了大规模的降本增效的工作,包括大规模的机房搬迁,从 5 个机房减少到 2 个机房,从而将多中心布局转变为双中心布局。在搬迁过程中,由于 B 站的 TiDB 版本为 4.0,相对陈旧,因此采用了 TiDB 的 TiDB-binlog 专用工具在两个中心之间进行了单向数据同步,实现了基础的高可用能力。

在这里插入图片描述

B 站 TiDB 运维经验分享

在运维大规模的 TiDB 集群过程中,我们也总结了一些值得参考的经验:

首先,必须制定关于 TiDB 的分布式数据库使用规范 。尽管 TiDB 功能强大,但依然需要明确的规范和使用限制。这包括明确规定数据备份的时间间隔、存储方式和恢复流程。同时,对数据库访问权限进行严格控制,以防止数据泄露和误操作。

其次,对业务需求的支持需结合 TiDB 产品特点以及优势,提供合理的评估和分析。 不能无差别地满足业务部门的所有需求,而应考虑其对数据库性能的影响及是否存在更优的解决方案。例如,面对业务部门提出的数据查询请求,需评估该请求是否会对性能产生负面影响,并探索可能的优化方法。

第三,建议坚持使用 TiDB 的官方推荐版本,并慎重考虑二次开发。 一些公司基于 TiDB 进行二次开发,但结果并不理想,特别是在降本增效和人员减少的背景下,他们面临独立版本分支维护复杂以及需求迭代缓慢等困境。因此,建议用户使用官方版本,以便在升级过程中更为顺利。非官方版本在遇到未知 bug 时,可能难以获得官方的有效支持,因为官方难以了解具体的改动情况。

最后,推动 TiDB 使用的工具化、自动化和平台化是关键。 随着集群规模的扩大,缺乏这些措施将导致运维工作低效且依赖人工,影响运维效率。通过自动化工具实现数据库的部署、监控和故障恢复,减少人工干预,提高工作效率。平台化的管理方式有助于对多个数据库集群进行统一监控和管理,及时发现并解决问题。

B 站 TiDB 升级 & 人才培养计划

B 站的 TiDB 版本目前还属于比较老的版本,但我们有一些升级规划:

在这里插入图片描述

如图所示,部分 v6.0 和 v7.0 版本的 TiDB 正在试运行中。由于目前绝大多数集群仍在运行 v4 版本,这一版本已显陈旧,因此在升级过程中存在诸多顾虑。特别是考虑到直接跳过 v5 和 v6 版本升至 v7 可能引发的兼容性问题和潜在风险,所以没有参与官方的升级活动,但已积极开展相关测试。 测试结果表明,从 4.0 版本直接升级至 7.5 版本,并进行 TiDB 同步是可行的 ,接下来的关键步骤是对业务流量进行验证。

在人才培养方面,B 站所有 MySQL 方向的 DBA 已全面参与到 TiDB 的学习和运维中。在此过程中,TiDB 社区提供的线上学习资源,以及体系化的课程学习和考试名额,对人才培养起到了积极的推动作用。

展望未来,B 站将继续增加对 TiDB 的投入,涵盖技术研发、人才培养和业务拓展等多个方面。随着 TiDB 技术的持续进步,预期将为 B 站的业务发展提供更强有力的支持。

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

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

相关文章

二九(vue2-05)、父子通信v-model、sync、ref、¥nextTick、自定义指令、具名插槽、作用域插槽、综合案例 - 商品列表

1. 进阶语法 1.1 v-model 简化代码 App.vue <template><!-- 11-src-下拉封装 --><div class"app"><!-- <BaseSelect :cityId"selectId" changeId"handleChangeId"></BaseSelect> --><!-- v-model 简化…

flask-admin+Flask-WTF 实现实现增删改查

背景&#xff1a; flask-adminflask-wtf在网上可以搜索到很多资料&#xff0c;但有价值的很少&#xff0c;或许是太简单&#xff0c;或者是很少人这么用&#xff0c;或者。。。&#xff0c;本文将作者近礼拜摸索到的一点经验分享出来&#xff0c;给自己做个记录。 材料&#…

Linux下基于最新稳定版ESP-IDF5.3.2开发esp32s3入门任务间的通讯-消息队列【入门四】

继续上一篇任务创建 【Linux下基于最新稳定版ESP-IDF5.3.2开发esp32s3入门任务间的通讯-信号量【入门三】-CSDN博客】 今天要实现消息队列进行任务的通讯 一、从上一篇信号量通讯demo拷贝一份重命名&#xff0c;还是之前的两个任务&#xff0c;重命名了。 xTaskCreatePinned…

workman服务端开发模式-应用开发-后端api推送修改二

需要修改两个地方&#xff0c;第一个是总控制里面的续token延时&#xff0c;第二个是操作日志记录 一、总控续token延时方法 在根目录下app文件夹下controller文件夹下Base.php中修改isLoginAuth方法&#xff0c;具体代码如下&#xff1a; <?php /*** 总控制* User: 龙哥…

ReactPress 1.6.0:重塑博客体验,引领内容创新

ReactPress 是一个基于Next.js的博客&CMS系统&#xff0c; Github项目地址&#xff1a;https://github.com/fecommunity/reactpress 欢迎Star。 体验地址&#xff1a;http://blog.gaoredu.com/ 今天&#xff0c;我们自豪地宣布ReactPress 1.6.0版本的正式发布&#xff0c;…

重拾设计模式--外观模式

文章目录 外观模式&#xff08;Facade Pattern&#xff09;概述定义 外观模式UML图作用 外观模式的结构C 代码示例1C代码示例2总结 外观模式&#xff08;Facade Pattern&#xff09;概述 定义 外观模式是一种结构型设计模式&#xff0c;它为子系统中的一组接口提供了一个统一…

接口测试Day03-postman断言关联

postman常用断言 注意&#xff1a;不需要手敲&#xff0c;点击自动生成 断言响应状态码 Status code&#xff1a;Code is 200 //断言响应状态码为 200 pm.test("Status code is 200", function () {pm.response.to.have.status(200); });pm: postman的实例 test() …

2024小迪安全信息收集第七课

目录 ICO图标 Django Flask Tornado 一、#JavaScript-开发框架-Vue&Node.js Vue Node.js 二、#PHP-开发框架-ThinkPHP&Laravel&Yii ThinkPHP Laravel Yii 三、#Java-框架组件-Fastjson&Shiro&Solr&Spring 52类110个主流Java组件和框架介绍…

提升专业素养的实用指南

在当今竞争激烈的职场&#xff0c;仅仅拥有专业技能已经不足以立于不败之地。持续提升自身专业素养&#xff0c;才是保持竞争力、实现职业目标的关键。那么&#xff0c;如何才能有效地提升专业素养&#xff0c;在职业道路上走得更稳、更远呢&#xff1f;以下是一些实用性建议&a…

C++ 查表 ← 数组、map、vector 等数据结构

【C 查表】 在C中&#xff0c;“查表”通常指的是使用数组或 map、vector 等数据结构来存储数据&#xff0c;并通过索引或键值进行 O(1) 时间复杂度的访问。【示例代码】 #include <iostream> #include <vector> #include <map> #include <unordered_map…

网上球鞋竞拍系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…

tryhackme-Pre Security-Windows Fundamentals 3(Windows基础知识3)

任务1&#xff1a;Introduction&#xff08;介绍&#xff09; 我们将继续探索 Windows 操作系统。 总结前两个房间&#xff1a; 在 Windows Fundamentals 1 中&#xff0c;我们介绍了桌面、文件系统、用户帐户控制、控制面板、设置和任务管理器。在 Windows Fundamentals 2 中…

pdf转换文本:基于python的tesseract

电脑系统&#xff1a;win10专业版 不能访问需要魔法上网 安装tesseract 在GitHub上下载:tesseract下载地址 找到自己电脑版本下载 双击安装&#xff0c;一路next&#xff0c;除了这一步 第三个加号点开&#xff0c;把带Chinese的都勾选 安装完成后配置环境&#xff0c;Win …

国产云厂商数据库产品--思维导图

为了对比国产云厂商数据库产品&#xff0c;我查阅了各云厂商的官方介绍&#xff0c;墨天轮等平台的部分数据和文章&#xff0c;整理出了简易的思维导图。 会去整理&#xff0c;也是因为有点懵&#xff0c;比如说阿里的PolarDB数据库&#xff0c;看起来就是一个数据库&#xff…

MongoDB(下)

MongoDB 索引 MongoDB 索引有什么用? 和关系型数据库类似&#xff0c;MongoDB 中也有索引。索引的目的主要是用来提高查询效率&#xff0c;如果没有索引的话&#xff0c;MongoDB 必须执行 集合扫描 &#xff0c;即扫描集合中的每个文档&#xff0c;以选择与查询语句匹配的文…

Unity 3D饼状图效果

一. 效果展示 二.基础类 using System.Collections; using System.Collections.Generic; using UnityEngine;public class DrawCylinder : MonoBehaviour {// 网格渲染器MeshRenderer meshRenderer;// 网格过滤器MeshFilter meshFilter;// 用来存放顶点数据List<Vector3>…

MyBatis是什么?为什么有全自动ORM框架还是MyBatis比较受欢迎?

MyBatis是什么&#xff1f; MyBatis是一个半自动的ORM持久层框架&#xff0c;内部封装了JDBC&#xff0c;mybatis是通过XML或注解的方式将需要执行的statement配置&#xff0c;支持定制化sql&#xff0c;存储过程以及高级映射。 解释 所谓的半自动ORM意思就是将JDBC的工作交…

吉利前端、AI面试

诸葛耘墒的在线视频面试 1、小程序端AI视频面试 虚拟人面试官提问 视频口述回答 1、最近的两份工作经历&#xff0c;以及上一份离职原因2、在过往的工作或生活中&#xff0c;需要学习掌握一项与工作有关的技能或兴趣爱好时&#xff0c;你会运用哪些方法和诀窍&#xff0c;投入…

基于容器的云原生,让业务更自由地翱翔云端

无论是要构建一个应用或开发一个更庞大的解决方案&#xff0c;在技术选型时&#xff0c;技术的开放性和可移植性已经成为很多企业优先考虑的问题之一。毕竟没人希望自己未来的发展方向和成长速度被自己若干年前选择使用的某项技术所限制或拖累。 那么当你的业务已经上云&#x…

S32K324 Stack异常分析及解决方案

文章目录 前言正向排查尝试反向排查问题原因分析问题解决处理总结前言 在项目开发过程中,在一次软件变更时,调整了task优先级之后导致应用层软件中的float数据经常性的变为NAN,导致应用层功能失效。本文记录下这个bug的分析及解决过程。 正向排查尝试 由于问题复现的概率…