bilibili分布式数据库演进之道(1)

简介: bilibili分布式数据库演进之道


本文根据王志广老师在〖deeplus直播:分布式数据库转型与运维实践探讨〗线上分享演讲内容整理而成。


王志广

bilibili 基础架构数据库负责人


  • 十年以上数据库运维经验,曾在多家大型互联网公司任职,主导和参与了多家数据库私有云建设、数据库多活、数据库架构从商业数据库到开源数据库的迁移。2020年加入B站,主导了B站新一代数据库可用系统BRM、MongoDB私有云等项目。目前主要专注于B站数据库多活、数据库服务治理等。


分享概要

一、业务场景

二、架构演进

三、架构设计

四、稳定性

五、效率


一、业务场景


在开始讲解之前,我先为大家介绍一下B站的业务场景。B站的业务大体上可以分为以下几类:



1、点播类业务


点播类业务就是大家经常看的视频以及稿件之类相关的业务,这类数据使用场景的特点有:


  • 数据一致性要求较高
  • 耗时敏感
  • 流量大
  • 可用性要求高



2、直播类业务


直播类业务对应B站的S12、跨晚、拜年祭等,有以下几个特点:


  • 数据一致性要求较高
  • 热点数据,如S12的主播房间
  • 平时流量中等,大型直播流量会呈现爆炸性增长
  • 可用性要求高



3、游戏类业务


  • 数据一致性要求较高
  • 耗时敏感
  • 流量大
  • 可用性要求高



4、电商类业务


如B站本身的会员购,这类业务的要求如下:


  • 数据一致性要求较高
  • 热点数据,集中在秒杀场景及热门番剧
  • 平时流量中等,热门番剧及商品会呈现爆炸性增长
  • 可用性要求高



5、支付类业务


  • 数据一致性要求极高
  • 可用性要求高
  • 流量不大


二、架构演进


介绍完B站的业务场景之后,接下来是B站整体数据库的架构演进历史。



1、1.0阶段



1.0阶段对于所有互联网公司而言,其实都有类似的架构——简单的主从,所有流量集中在一个主库上。另外,与以前使用的商业数据库类似场景——单实例多库。这种架构在公司刚起步的时候是比较方便的,便于业务的快速迭代,但是随着流量的增长,会出现以下几个问题:


1)单机的性能瓶颈


服务器的CPU、内存、存储的限制我们不可能一直垂直升级,从而出现了我们第一个架构演进的小版本——读写分离和一主多从,此场景有两个核心要求:


  • 数据一致性要求较低
  • 数据敏感度要求较低


满足以上两个要求的场景可以很好地规避因MySQL主从复制存在的延迟所带来的问题,同时又可以满足业务快速增长带来的流量压力。


2)各业务互相影响


随着业务的发展,各个业务之间的互相影响推动了我们架构的第二个小版本出现——按照业务库进行迁移拆分。




基于读写分离和业务库维度的拆分还是无法避免各个功能模块的互相影响。在这种情况下,架构1.0阶段的第三个小版本应运而生——基于业务的功能维度进行拆分,将一个X库拆分为n个库,拆分完之后分布在不同的实例。在每个不同的实例下,我们会有不同数量的从库支撑业务的流量增长,以满足大部分场景的业务需求。现在B站也有很多业务采用类似的架构,通过进行垂直业务拆分满足我们的业务增长。



2、2.0阶段



架构2.0阶段——水平拆分。成熟、稳定、定制的Proxy是水平拆分的利器,而一个符合要求的Proxy是需要时间进行打磨。为满足业务的快速发展,我们选择在业务层实现,也就是我们在代码层实现路由,虽然配置时会比较繁琐,但能够满足大部分业务场景,很多互联网公司也有类似的阶段。在业务侧进行水平拆分之后,我们其实面临着一个新的问题——跨实例查询



3、3.0阶段


1)第一个阶段



进入B站演进的3.0阶段,我们引入了TiDB,将之前业务层面的分片数据通过TiDB本身的DTS同步到TiDB集群,从而满足了大部分业务的查询需求。同时我们在部分场景的业务下直接尝试使用TiDB。


引入TiDB之后,基于B站的特点,我们对其进行了本地化定制。由于TiDB Server是无状态的,而官方对于如何路由到每个节点也没有一个通用的解决方案。因此我们结合 B站的基础平台能力,将TiDB Server全部在PaaS上进行容器化,同时把我们的服务发现能力和TiDB Server进行整合,并对相应语言的SDK进行改造,从而实现了TiDB Server的负载均衡,解决了TiDB Server本身的瓶颈,如:故障切换、业务快速感知节点变化、连接数等。


2)第二个阶段



到了3.0的第二个阶段,我们已经把Proxy打磨为一个很成熟的产品,同时为满足支撑了异地多活的场景,我们还定制了DTS,把我们数据库的部署从同城多活直接做到了异地多活,也就是两地三中心的架构。


首先,在DTS方面,我们也基于B站本身技术栈的特点做了大量的定制,与其它公司开源的组件有部分不同。例如冲突检测,我们提供了多种可选择的规则,包括基于特定字段的以及全字段匹配的,同时对于冲突字段数据的R数据处理,我们一般会有两种途径:


  • 一是直接冲突的场景,将不重要的数据直接打入到我们的队列里,也就是我们公司之前的Data Bus里;
  • 二是业务方可以基于打到Data Bus里的数据做冲突数据处理,通过DTS提供一个接口将数据回写到特定的机房,因为当需要把数据重新写入数据库时,也是需要做防回环的处理,所以我们DTS上提供一个接口供业务使用。


其次,在主从切换的时候,由于两地三中心要保证数据可以进行来回切换,切换期间虽然是全局进行,但是一些边缘场景下仍然会存在数据冲突的问题。所以我们也提供了一个在主从切换下数据冲突以及相关信息的打捞队列,实现二次处理的功能,这也是我们中间 DTS提供的一个能力。


Proxy的能力与各家主流的功能是类似的,都能够支持读写分离、分库分表、限流、黑白名单等。对于Proxy的部署,我们采取了两种方案:


  • 一是集中式部署,类似于大家常说的网关模式,能够便捷地进行统一的限流及资源的调控;
  • 二是Sidecar模式,应用层在使用方面比较简单,直接配置本地IP即可,但是同时已带来其他问题,如全局的管控(限流、连接等)、成本等。



相关文章
|
SQL 关系型数据库 MySQL
乐观锁在分布式数据库中如何与事务隔离级别结合使用
乐观锁在分布式数据库中如何与事务隔离级别结合使用
224 5
|
7月前
|
存储 监控 分布式数据库
ClickHouse分布式数据库动态伸缩(弹性扩缩容)的实现
实现ClickHouse数据库的动态伸缩需要持续的维护和精细的操作。从集群配置到数据迁移,再到监控和自动化,每一步都要仔细管理以确保服务的可靠性和性能。这些活动可以显著提高应用的响应性和成本效率,帮助业务根据实际需求灵活调整资源分配。
431 10
|
8月前
|
存储 关系型数据库 分布式数据库
【赵渝强老师】基于PostgreSQL的分布式数据库:Citus
Citus 是基于 PostgreSQL 的开源分布式数据库,采用 shared nothing 架构,具备良好的扩展性。它以插件形式集成,部署简单,适用于处理大规模数据和高并发场景。本文介绍了 Citus 的基础概念、安装配置步骤及其在单机环境下的集群搭建方法。
755 2
|
SQL 关系型数据库 MySQL
乐观锁在分布式数据库中如何与事务隔离级别结合使用
乐观锁在分布式数据库中如何与事务隔离级别结合使用
|
存储 SQL 分布式数据库
OceanBase 入门:分布式数据库的基础概念
【8月更文第31天】在当今的大数据时代,随着业务规模的不断扩大,传统的单机数据库已经难以满足高并发、大数据量的应用需求。分布式数据库应运而生,成为解决这一问题的有效方案之一。本文将介绍一款由阿里巴巴集团自主研发的分布式数据库——OceanBase,并通过一些基础概念和实际代码示例来帮助读者理解其工作原理。
1309 0
|
10月前
|
SQL 存储 分布式数据库
分布式存储数据恢复—hbase和hive数据库数据恢复案例
分布式存储数据恢复环境: 16台某品牌R730xd服务器节点,每台服务器节点上有数台虚拟机。 虚拟机上部署Hbase和Hive数据库。 分布式存储故障: 数据库底层文件被误删除,数据库不能使用。要求恢复hbase和hive数据库。
378 12
|
12月前
|
SQL 运维 关系型数据库
体验用分布式数据库突破资源瓶颈,完成任务领智能台灯!
体验用分布式数据库突破资源瓶颈,完成任务领智能台灯!
|
12月前
|
SQL 数据建模 BI
【YashanDB 知识库】用 yasldr 配置 Bulkload 模式作单线程迁移 300G 的业务数据到分布式数据库,迁移任务频繁出错
问题描述 详细版本:YashanDB Server Enterprise Edition Release 23.2.4.100 x86_64 6db1237 影响范围: 离线数据迁移场景,影响业务数据入库。 外场将部分 NewCIS 的报表业务放到分布式数据库,验证 SQL 性能水平。 操作系统环境配置: 125G 内存 32C CPU 2T 的 HDD 磁盘 问题出现的步骤/操作: 1、部署崖山分布式数据库 1mm 1cn 3dn 单线启动 yasldr 数据迁移任务,设置 32 线程的 bulk load 模式 2、观察 yasldr.log 是否出现如下错
|
容灾 关系型数据库 分布式数据库
PolarDB分布式版:与云融合的分布式数据库发展新阶段
PolarDB分布式版标志着分布式数据库与云融合的新阶段。它经历了三个发展阶段:从简单的分布式中间件,到一体化分布式架构,再到云原生分布式数据库。PolarDB充分利用云资源的弹性、高性价比、高可用性和隔离能力,解决了大规模数据扩展性问题,并支持多租户场景和复杂事务处理。零售中台的建设背景包括国家数字化转型战略及解决信息孤岛问题,采用分布式数据库提升高可用性和性能,满足海量订单处理需求。展望未来,零售中台将重点提升容灾能力、优化资源利用并引入AI技术,以实现更智能的服务和更高的业务连续性。
421 9