OceanBase 4.0 解读:降低分布式数据库使用门槛,谈谈我们对小型化的思考

news2025/4/8 19:35:49
关于作者
赵裕众

OceanBase 资深技术专家,2010 年加入支付宝后从事分布式事务框架的研发,2013 年加入 OceanBase 团队,目前负责存储引擎相关的研发工作。


 

近年来,随着应用场景多样化和数据量的增长,我们看到分布式数据库正快速普及到各行各业,通过数据一致性、高可用、弹性扩展等方面的技术能力,为用户海量数据、高并发的业务场景提供极佳的解决方案。同时,分布式数据库天然会需要配置多台服务器,以保证高可用和性能。因此,在很多数据规模较小、相对简单的业务场景,用户通常会在发展初期选择门槛更低、性能更强(小规格下)的集中式数据库。但这一选择也存在一定的弊端:随着用户的业务量不断增长,最终会到达集中式数据库的性能瓶颈,等到再进行架构调整重构时,将会带来极高的难度和成本。

在今年的云栖大会,OceanBase 社区版 4.0(代号:小鱼) 正式与大家见面,这也是业内首个兼容 MySQL 的单机分布式一体化数据库。 这一版本提供了许多用户期待的能力,我们通过单机一体化架构、单机部署、小规格降低部署成本,一键安装部署提升易用性,更强的 OLAP 能力提升分析能力,最终实现 OceanBase 社区版 4.0 在 4C16G 的生产系统能够稳定运行。我们希望可以通过单机与分布式的双重技术优势,为用户在数据库选型时带来“一次选择,终身受用”的新可能。

从用户的反馈来看,OceaBase 社区版 4.0 在单机分布式一体化、小型化方面备受大家关注。我们认为,小型化不只是完备功能前提下的单机部署,更重要的是在同等硬件下可以实现更好的性能。本篇文章将分享 OceanBase 对分布式数据库探索“小规格”的思考,介绍我们在实践单机分布式一体化架构时的技术创新思路与方案:

用户为什么需要小型化的分布式数据库;
分布式数据库小型化的关键步骤;
OceanBase 在小规格下的性能表现。

 

用户为什么需要小型化的分布式数据库?

 

在进入主题之前,我们先回顾一下 OceanBase 发展历程中的重要时刻:2010 年,OceanBase 正式创立,创立至今的 12 年间, OceanBase 相继打破 TPC-C、TPC-H 世界纪录,陪伴大家度过了一次次“双 11”,保障大家每一笔交易都能够安全高效地执行。在这一次又一次的挑战中,OceanBase 作为一款完全自主研发的原生分布式数据库,扩展性和稳定性也被不断得到验证,从 TPC-C 第一次打榜的 203 台 ECS 服务器到第二次打榜的 1554 台 ECS 服务器,OceanBase 的性能都是随着机器数量增加而线性提升。

另一方面,随着 OceanBase 从金融场景逐步走向通用场景,我们意识到并不是所有用户的业务都具有“双 11”时所面对的数据量,事实上,在许多用户的业务发展初期,单机部署形态的数据库完全可以满足其需求。因此,在用户业务初期数据量还很小的时候,给用户提供一个尽可能低的启动规格非常重要。这将帮助用户以一个非常低的成本,做业务启动探索,同时借助 OceanBase 的良好扩展性,在后期又可以弹性扩容,以面对不断增加的用户数据和性能需求。

 

▋ 从小到大,每一个创新业务对数据库的基本诉求

 

最新的 OceanBase 4.0 版本最小支持 4C8G 的部署规格。4C8G 是什么概念?其实就是一台稍好的笔记本电脑的配置,换句话说,OceanBase 4.0 可以在大家的个人电脑上安装部署并稳定运行了。

从 4C8G 开始,OceanBase 4.0 可以随着用户的业务增长进行弹性扩容,能够从小到大支持用户全生命周期的数据库需求,帮助用户更好地降本增效、进行业务创新。

  1. 在用户业务发展初期, 数据量并不大,对容灾也没太高需求,便可以在单台服务器上部署运行 OceanBase 4.0,同时利用 OceanBase 的备份功能定期做下冷备以防万一;
  2. 当用户业务逐步成长起来, 可以先对服务器做纵向升级,此时用户对容灾有了一定需求,OceanBase 和传统数据库一样支持主备库部署,用户可以使用两台服务器做基础的在线容灾(由于主备架构的限制,此时容灾管理仍需要人工介入);
  3. 当用户业务初具规模, 数据变得越来越重要,此时用户可以升级到 OceanBase 的三副本架构,使用三台服务器来保证高可用,容灾也将变成自动化:即使单台机器发生故障,OceanBase 4.0 仍然可以保证 RTO < 8s(8s 内业务恢复)和 RPO = 0(数据不丢);
  4. 当用户业务进一步变大, 单机配置升级到顶,此时用户就会遇到和当初淘宝、支付宝一样“幸福”的烦恼,此时,OceanBase 的透明分布式扩展能力可以帮助用户把集群从 3 台扩展到 6 台、9 台乃至上千台。

 

Image
图1 不同业务规模下 OceanBase 与传统数据库部署方式演进对比

 

▋ 平滑过渡,让性能保持线性增长

 

OceanBase 的单机分布式一体化架构,可以帮助用户在从单机形态部署直至多集群的分布式部署,始终能够平滑过渡,并保持性能的线性增长。

借助 OceanBase 良好的单机纵向扩展性,单机配置的升级通常会取得性能的线性增长。当用户进行分布式扩展时(例如从 3 台扩展到 6 台服务器),通常会引入分布式事务,一般而言,分布式事务的引入通常会带来一定的性能损失,但 OceanBase 可以通过多种机制降低分布式事务发生的概率:首先可以通过 OceanBase 的 TableGroup 机制,将多张表绑定在一起来降低分布式事务发生的概率;其次 OceanBase 良好设计的负载均衡策略也能帮助减少分布式事务。

此外,OceanBase 良好的分布式扩展性也能够保证随着用户使用的服务器数量增加,性能保持线性增长。例如在 TPC-C 测试中,尽管包含了大约 10% 左右的分布式事务,随着数据库集群规模的增大,OceanBase 性能的提升仍然是线性的。

 

Image
图2 OceanBase 在不同节点数量下的 TPC-C 测试结果

 

更重要的是,在从一台到两台,到三台以及上千台的扩容过程中,所有操作都可以通过对 OceanBase 集群的运维来完成,对业务是完全透明的,用户上层的业务不需要修改一行代码,也不需要手动搬迁操作数据。当然,如果用户使用的是 OceanBase Cloud,所有的备份、扩容、运维操作都将一站式完成,更方便用户的使用。

从 OceanBase 4.0 版本开始研发的第一天起,我们就在思考如何让分布式数据库运行在更小规格的硬件上,并具备更强劲的性能,帮助用户在不同的业务场景下满足对性价比和高可用的要求。OceanBase 4.0 的小型化,不仅可以在具备完整功能的前提下实现单机部署,更重要的是能在同等硬件下实现更好的性能。

 

OceanBase 4.0 小型化的关键技术

 

在基础软件领域,把数据库系统“做大”是一件非常困难的事情,因为随着系统中的节点不断增多,出故障的概率也会不断增加。例如,OceanBase 做 TPC-C 第二次打榜时使用了 1554 台 ECS 服务器,其中出现单台机器故障的频率大约是一天一次到两天一次。这需要我们把产品做的足够稳定和高可用,才可以让这样一个大的集群保持正常运行。

而把数据库系统“做小”同样不容易,因为这需要深入到每一个细节,几乎是用显微镜去抠每一处资源的使用。 不仅如此,在大规格下一些合适的设计或者配置,到小规格下会变得完全不可接受。而更困难的是,我们要在同一套架构里面同时兼顾小和大,这需要我们在大小规格之间做设计上的权衡取舍,尽可能减少分布式架构带来的额外开销,同时在很多场景中让数据库系统根据机器规格做自适应处理。下面我们将以 CPU 消耗、内存消耗者两个主要难点的解决过程为例,介绍 OceanBase 4.0 的技术思路。

 

▋ 实现动态日志流控制,降低 CPU 消耗

 

OceanBase 4.0 实现小型化,要解决的第一个问题是 CPU 消耗,在 4.0 版本之前,OceanBase 会为每个数据表的分区创建一个 Paxos 日志流,通过 Paxos 协议来保证分区数据的多副本一致性。这样的设计非常灵活,因为 Paxos 组是基于分区的,这意味着分区可以非常灵活地在不同服务器之间迁移;但同时也带来了很大的 CPU 开销,由于对每个 Paxos 日志流都会有选主、心跳和日志同步的开销,当服务器规格较大或者分区数量较少时,这些额外开销相对来说占的比例并不是很高;但当服务器规格变小时,Paxos 协议带来的开销就变得难以接受了。

OceanBase 4.0 是如何解决这一问题呢?我们认为最直接有效的办法是减少 Paxos 日志流的数量。如果能够将 Paxos 日志流的数量减少到与服务器个数同量级的程度,那么这部分开销就和传统数据库主备库模式下的日志开销差不多了。

 

Image
图3 OceanBase 4.0 动态日志流集群架构图

 

在 OceanBase 4.0 中,我们将多个数据表分区聚合为一个 Paxos 日志流,并进行动态日志流控制。如上图所示,一个数据库集群中有三个 zone,每个 zone 各包含两台服务器。假设有一个租户配置了两个 unit,那么相应地这个租户就会有两个 Paxos 日志流,一个日志流中包含分区(P1, P2, P3, P4),另一个日志流中包含分区(P5, P6)。

如果两台服务器的负载不均衡,那么 OceanBase 的负载均衡模块会在 Paxos 日志流之间做分区的调度;

如果需要做集群的扩容,那么可以将一个 Paxos 日志流分裂为多个 Paxos 日志流,并做 Paxos 日志流的整体迁移;

如果需要做集群的缩容,那么可以将多个 Paxos 日志流迁移到一起,并做多个 Paxos 日志流的归并。

通过动态日志流控制,OceanBase 4.0 在保证高可用灵活扩展的基础上,极大减少了分布式架构带来的 CPU 开销。

 

▋ 元数据动态加载,让小内存支持高并发

 

OceanBase 4.0 实现小型化,要解决的第二个关键问题是内存消耗。在 4.0 版本之前,出于性能的考虑,OceanBase 会让一部分元数据在内存中常驻,当内存规格较大时,这些内存所占的比例并不是很高;而当服务器规格要降低到很小时,这些元数据内存的大小就变得难以接受了。为了带给用户更加极致的小规格能力,我们实现了所有元数据的动态加载。

 

Image

图4 SSTable 分层存储

 

如上图所示,我们将 SSTable 做了分层存储,将 SSTable 的根存储在分区内,在内存中只维护分区的句柄。只有当需要对分区进行访问时,才将需要访问的数据通过 kvcache 动态加载起来。我们做到了让 OceanBase 4.0 可以在较小内存的规格下,支持较大数据量的高并发访问。

 

OceanBase 在小规格下的性能表现

 

为了测试小规格下的实际性能效果,我们基于三台 4C16G 的服务器,按照 1:1:1 模式来部署 OceanBase 社区版 4.0,并同时和 4C16G 的 RDS for MySQL 8.0 通过 Sysbench 进行性能对比,可以看到绝大多数场景中,OceanBase 社区版 4.0 的性能都优于 RDS for MySQL 8.0,尤其在 Insert 和 Update 两个场景中,同样的硬件条件下,OceanBase 社区版 4.0 的吞吐量表现是 RDS for MySQL 8.0 的 1.9 倍。

 

Image

图5 OceanBase 社区版 4.0 & RDS for MySQL 8.0 Sysbench 性能测试结果(吞吐量,4C16G)

 

此外,我们也在用户最为常用的 8C32G、16C64G、32C128G 场景,分别进行了对比测试。随着服务器规格的提升,OceanBase 社区版 4.0 与 RDS for MySQL 8.0 的单机性能差距逐渐拉大。在 32C128G 的硬件规格下,OceanBase 社区版 4.0 吞吐量最高可达 RDS for MySQL 8.0 的 4.3 倍,响应时间缩短至 RDS for MySQL 8.0 的 1/4。

 

图6 OceanBase 社区版 4.0 & RDS for MySQL 8.0 Sysbench 性能测试结果(吞吐量)

 

表1 OceanBase 社区版 4.0 & RDS for MySQL 8.0 Sysbench 性能测试结果(吞吐量和响应时间)

 

写在最后

 

无论是对大规格 TPC-C 测试中上千台机器下极致性能的追逐,还是对小规格 4C16G 单台机器测试下极致的资源使用,背后始终不变的是 OceanBase 的初心:让数据管理和使用更简单。把复杂留给自己,把简单留给用户,是每一位 OceanBase 工程师的信念。OceanBase 还在快速成长,也还并不完美。无论是更大规格下的性能优化,还是更小规格下的资源节省,我们都还有大量的工作要做。OceanBase 社区版 4.0 版本已经上线,我们也期待和所有用户一起,打造一款真正好用、通用的数据库。

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

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

相关文章

判别分析-书后习题回顾总结

5-2 题目 理论基础 多总体的距离判别 马氏距离&#xff1a;dG2(x)(x−μ)2σ2d^{2}_{G}(x)\frac{(x-\mu)^{2}}{\sigma^{2}}dG2​(x)σ2(x−μ)2​ 取马氏距离最小的那一个&#xff0c;就属于这类。 贝叶斯判别准则 计算qtft(x)q_{t}\times f_{t}(x)qt​ft​(x) ft(x)12πσ…

001:Object-C介绍、创建第一个iOS工程、MVC架构

常见APP基础业务模块&#xff1a; 常见App类型&#xff1a;通信与存储、流媒体、直播技术、图片处理、内容展示、Web、组件化、IM类型、音视频、直播类型、摄影摄像类型、资讯类型、工具、购物类型。 App 展示界面动画&#xff1a;底部TabBar、Navigation、列表、图片ImageVi…

一文囊括Ceph所有利器(工具)

原文链接: 知乎专栏: 一文囊括Ceph所有利器(工具) - 知乎 前言 ceph的工具很多&#xff0c;包括集群管理与运维&#xff0c;还有性能分析等等。 所以本文期望应收尽收所有的工具&#xff0c;也当做自己的一个梳理与总结&#xff0c;当自己需要的时候知道有哪些利器可以使用…

一文搞懂SSL/TLS

SSL/TLS1. 概述2. 协议组成2.1 握手协议&#xff08;Handshake protocol&#xff09;2.2 记录协议&#xff08;Record Protocol&#xff09;2.3 警报协议&#xff08;Alert Protocol&#xff09;3. 密码套件与密钥生成1. 概述 安全套接字层&#xff08;SSL&#xff0c;Secure …

使用 X2MindSpore 迁移 Pytorch 训练脚本mobileNet支持分布式训练

简介 MindSpore是华为昇腾开发的深度学习框架&#xff0c;旨在提供端边云全场景的AI框架。 Pytorch是由Facebook推出的AI框架。 本教程使用MindStudio中的X2MindSpore功能自动将Pytorch脚本转换为MindSpore脚本的案例。使用的模型是分类任务模型mobileNet&#xff0c;数据集是c…

【自动化测试】Selenium IDE脚本编辑与操作(了解)

之前&#xff0c;我们录制脚本时是录制鼠标和键盘的所有在浏览器的操作&#xff0c;那么脚本会出现多余的步骤&#xff0c;有时候我们需要手动填写脚本或修改脚本&#xff0c;所以我们有必要对selenium IDE脚本编辑与操作有所了解&#xff1b;&#xff08;采用录制的方式很容易…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java校园招聘管理系统968b0

毕业设计也不需要做多高端的程序&#xff0c;毕业设计对于大多数同学来说&#xff0c;为什么感觉到难&#xff0c;最重要的一个原因&#xff0c;那就是理论课到实践课的转变&#xff0c;很多人一下不适应&#xff0c;本能开始拒绝&#xff0c;如果是一个考试&#xff0c;大家都…

【大数据入门核心技术-Hbase】(一)HBase简介

目录 一、HBase基本概述 1、Hbase是什么 2、什么时候用Hbase&#xff1f; 二、HBase基本架构 1、Client 2、Zookeeper 3、HMaster 4、 RegionServer 三、HBase逻辑结构 一、HBase基本概述 1、Hbase是什么 HBase是一个分布式的、面向列的开源数据库&#xff0c;该技术…

pstore

pstore简介 pstore最初是用于系统发生oops或panic时&#xff0c;自动保存内核log buffer中的日志。不过在当前内核版本中&#xff0c;其已经支持了更多的功能&#xff0c;如保存console日志、ftrace消息和用户空间日志。同时&#xff0c;它还支持将这些消息保存在不同的存储设…

新手教程 | 手把手教你 谷歌浏览器如何使用HTTP代理?

本文将针对谷歌浏览器如何使用代理IP进行详细说明&#xff0c;具体步骤如下&#xff1a; 1、代理IP信息查看 查看自己所购买的相对应的代理IP面板&#xff0c;点击代理IP -查看详情-进行查看“AuthKey”以及“AuthPwd”信息。 2、代理IP资源提取 在控制台-代理IP-中的“提取…

Spring cloud Gateway 服务网关 实战

Spring cloud Gateway 服务网关一、简介优点&#xff1a;特性&#xff1a;总结&#xff1a;二、核心概念三、路由规则1、Path2、Query3、Method4、Datetime5、RomoteAddr6、Header四、动态路由1、依赖2、配置动态获取URI服务名称转发五、过滤器1、网关过滤器 GatewayFilter局部…

Allegro如何给差分过孔添加禁布操作指导

Allegro如何给差分过孔添加禁布操作指导 Allegro支持给差分过孔添加禁布,让它避让周围的铜皮,具体操作如下 以下图两个过孔为例,需要做一个和via避让铜皮尺寸一样大的禁布 选择show element命令 Find选择Other segs 鼠标移动到铜皮避让圆形的地方 出现一个report,记住…

【并发编程】SemaphoreCountDownLatchCyclicBarrier

一、Semaphore Semaphore 通常又被称为信号量&#xff0c; 可以用来控制同时访问特定资源的线程数量&#xff0c;通过协调各个线程&#xff0c;以保证合理的使用资源。 1.简单的使用 1-1.控制线程的并发连接数 public static void main(String[] args) {// 只允许两个线程执…

中英翻译《动物看见了什么》

What animals see 动物看见了什么 一、Pre-reading activity 阅前思考 1.What animals do you like? 你喜欢什么动物&#xff1f; 2.Do you have any animals in your home? 你家里有动物吗&#xff1f; 3.Do you think most animals can see as well as we can? 你认为大多…

Windows下docker安装

安装 1.打开Hyper-V &#xff0c;在"启用或关闭Windows功能" 如果这里的Hyper-V平台灰色不能勾选 显示无法安装Hyper-v该固件中的虚拟化支持被禁用&#xff0c;则需要开启 开始方式&#xff1a; 重启电脑进入BIOSS界面 点击高级–>CPU设置 —> Intel virtu…

44. python的for循环嵌套

44. python的for循环嵌套 文章目录44. python的for循环嵌套1. 什么是嵌套2. for循环中嵌套有if条件判断语句2.1 先创建一个奇数序列2.2 判断一个数是否能被7整除2.3 将2部分代码合二为一3. for循环中嵌套有for循环1. 什么是嵌套 嵌套是指一个对象中包含另一个与它相似的对象。…

Python 中在两个字典中查找公共键

Python 中要在两个词典中查找公共键&#xff1a; 使用 dict.keys() 方法获取每个字典的键的视图对象。使用 & 符号获取常用键。使用 list() 类将结果转换为列表对象。 dict1 {name: jiyik, topic: Python, salary: 100} dict2 {name: alice, salary: 100, experience: …

R语言探索BRFSS数据可视化

设定 加载包 最近我们被客户要求撰写关于BRFSS数据的研究报告&#xff0c;包括一些图形和统计输出。在本实验中&#xff0c;我们将使用dplyr软件包探索数据&#xff0c;并使用ggplot2软件包对其进行可视化以进行数据可视化 library(ggplot2) library(dplyr) 载入资料 load…

初识Netty框架

总体概述 Netty作为一款网络通信框架&#xff0c;底层封装了NIO。我们在使用Netty时&#xff0c;无需再关注NIO细节。下图为Netty处理流程图&#xff1a; 应用程序中使用Netty作为网络通信框架后&#xff0c;会形成一条PipeLine链&#xff0c;PipeLine链上有一个一个的事件处…

buuctf10(异或注入中文字符绕过preg_match伪随机数漏洞seed)

目录 [WUSTCTF2020] 颜值成绩(异或注入) [Zer0pts2020]Can you guess it?(中文字符绕过preg_match) [FBCTF2019]RCEService(/bin/调用命令 || 回溯绕过preg_match) [GKCTF 2021]easycms(后台弱口令&任意文件下载) [GWCTF 2019]枯燥的抽奖(伪随机数漏洞seed) [MRCTF20…