OceanBase 4.0版本有哪些关键特性|11月社区月报

2024年 5月 7日 48.4k 0

我们每个月都会和大家展开一次社区进展的汇报沟通会,希望通过更多的互动交流让OceanBase 开源社区更加透明,实现信息共享,也希望能营造更加轻松的氛围,让大家可以在此畅所欲言、答疑解惑。如果您对我们的社区有任何建议,欢迎在 GitHub 上提 Issues 或 PR ,也欢迎大家称为 Contributor,参与到社区建设中来。

OceanBase 4.0版本有哪些关键特性|11月社区月报-1

在过去一个月,OceanBase 产生了许多新动态,其中最引发大家关注的事件是OceanBase 4.0版本的发布。因此,在本月的月报中,就和大家聊聊OceanBase 架构演进和OceanBase 4.0的功能。同时,也会向大家分享产品的未来规划。

OceanBase 架构演进

回顾2014年的 OceanBase 0.5 版本,这一个存算分离的架构(见图1),所有数据存放在 UpdateServer 或 ChunSever 中,并在 MergeSever 中计算。MergeSever 接受了所有的 SQL 且保证了无状态,在底层的 ChunSever 可以自动分裂,并做到存储水平的扩展,而 UpdateServer 则会通过Paxos来保证高可用强一致性。

OceanBase 4.0版本有哪些关键特性|11月社区月报-2

图1 OceanBase v0.5 架构 (2014)

OceanBase 0.5 版本也支撑了2014年的支付宝“双11”,但当时的 OceanBase 存在一个问题——单点写,即永远只有一台机器能够提供“写”服务,也不能做到线性扩展。

随后我们用近一年的时间重构 OceanBase 架构,如图2所示,OceanBase 1.0版本到3.0版本的架构,将 SQL 引擎、事务引擎、存储引擎、RS模块放到一个单进程中,降低了架构的复杂度。

OceanBase 4.0版本有哪些关键特性|11月社区月报-3

图2 OceanBase v1.0至v3.0架构

OceanBase 1.0版本至3.0版本的架构特点可以总结为如下三点。

  • 对等节点:每个节点都是一个对等的节点没有共享,每个分区可以直接做数据分片扩展。
  • 单机低延时:支持本地执行计划、本地执行事务的 API,所有的读写无网络开销。
  • 多机低时延:可以区分远程计划和分布式计划,远程计划中事务的第一条 SQL 发到某节点,该节点会承担整个事务的所有请求,如果数据在另一条节点上,则会发起远程调用。

该阶段架构的问题是,当分区数特别高时,底层的 I/O 压力较大,对内存的消耗过大,无法把整个进程控制在非常小的单机中。而在过去最低为16c和64G的生产环境规格,对硬件的要求也比较高。

2020年初,我们开始重构整个事务引擎、存储引擎、SQL 引擎,开发 OceanBase 4.0版本,架构见图3。我们做了很大的调整,将事务提交单位和数据迁移单位分开,单机上所有分区的事务日志统一到一个日志流当中,数据迁移单位(Tablet)和原来的分区表概念稍做区分。

OceanBase 4.0版本有哪些关键特性|11月社区月报-1

图3 OceanBase v4.0架构

在3.x当中,随着日志流的增多,选举及网络的开销会逐渐变大。在综合考虑架构设计后,我们在4.x 当中将日志流和数据存储单位隔开,这样就可以将数据分在多个不同的分片上,不同的分片在进行事务提交时写到一个日志流中。该方式有几个好处:一是大幅降低日志IO的并发冲突;二是降低了选举的开销,从原来的分区级降低为单机日志流级。

OceanBase 4.0版本的架构具有单机分布式一体化的特点就是在单机环境下,系统类似一个单机的SQL引擎、单机的事务引擎、单机的存储引擎,但它可以自适应考虑SQL 的执行, 对于小数据量或单机事物时, 自动适配为单机串行执行, 如果打开并行开关, 可以自动升级为单机并行执行, 当数据跨多机执行时, SQL的执行会自动演变为分布式执行, 并且根据并行开关配置, 自动适配为分布式并行执行或者分布式串行执行。在分布式环境下,整个引擎是分布式的SQL引擎、分布式的事务引擎、分布式的存储引擎,它需要考虑更加高效的创新执行、单机的事务优化,以及轮换合并等。也就是说,OceanBase 4.0版本的每一个组件、每一个模块都要兼顾单机和分布式这两种模式。这对我们技术人员的挑战更高,也让我们考虑了更多的场景、更多的变化,我们用过去两年的时间才将这个门槛迈过去。

而对于用户来说,单机分布式自适应的架构意味着 SQL可以单机执行,也可以分布式执行,还可以并行执行。更多的详细介绍参见《从0.5到4.0,OceanBase单机分布式一体化的技术演进》。

以上就是OceanBase架构发展中的变化,下面向大家重点介绍OceanBase 4.0版本的关键特性及其对用户来说意味着什么。

OceanBase 4.0版本的关键特性解析

关键特性1 :更多分区数

OceanBase 4.0版本的架构降低了分区维护的开销,除此之外,内存的优化不可小视。在过去的版本中,我们会为每2MB的宏块维护一个元数据,元数据和数据的比例大概是1:1000,因此,对于磁盘较大的机型,元数据开销也会增加很多。而在本次迭代中,我们将存储内存的开销做成按需加载,在内存中只维护 root 节点(内存很小)。当用户需要去访问元数据时,再去加载它的叶子节点和数据节点。这种方式降低了常驻内存的开销,带来了小规格内存优化的特性。

关键特性2:支持更多DDL

在社区版的技术答疑群,我们经常能看到用户提问:为什么不支持数据类型转换和分区变更?主要因为这部分 DDL 会对数据的分布及数据类型进行一些调整,在过去的版本中,凡是涉及底层数据变更的 DDL 都是不支持的。

OceanBase 4.0版本中,我们将这部分的DDL能力补齐,支持用户进行分区变更,可以类型变更,也可以变更主键,方便大家延续原有的数据库使用习惯。

DDL 的实现原理比较简单。首先新建一张隐藏表,等 DDL 开启前的事务结束,并获取快照点,再对原表进行停止读写;其次,用一个 DML 语句把原表的数据插入隐藏表中进行数据补全;最后,对原表进行重命名。该过程中的数据补全涉及三个关键技术点:一是表锁,当我们做这些操作时,需要对这张表进行禁写;二是PDML,当对原表进行查询时利用 PDML 加速查询,简化流程代码; 三是Direct insert,插入数据时会直接写到静态数据,避免内存爆满,且速度较快。

目前该过程对用户来说是离线的,我们正在开发在线的版本,预计会在OceanBase 4.1 或 4.2 版本提供。

OceanBase 4.0版本有哪些关键特性|11月社区月报-5

图4 DDL实现原理及步骤

关键特性3:更小的资源占用

OceanBase 4.0版本中,生产环境规格从 16C/64G降低到了4C/16G,帮助用户降本增效。我们主要做了以下几点优化。

  • 线程堆栈优化:减少线程局部变量,使用 smartvar 减少栈变量。
  • 优化元数据开销:从 perpartition 到 perlogstream ,存储元数据按需加载。
  • 稳定性提升:默认打开导入限速,在4C/16G下会跑得更稳定。
  • .......

关键特性4:租户隔离

借着OceanBase 4.0架构与OceanBase 3.x架构不兼容的契机,我们对租户耦合逻辑做了优化,主要有以下三点。

  • 租户级别合并:默认的合并行为从集群整体触发改成租户触发。
  • 租户级别元信息:将元信息从系统租户调整到用户租户,将 tableid 和 tenantid 解耦。
  • 租户 I/O 隔离:Clog 文件拆分到租户,SSTable 支持租户级别 I/O 限速。

关键特性5:性能优化

性能优化体现在两个层面。第一,TP 性能优化,虽然我们做了很多小的优化点,基本是1%、0.5%.的迭代,但这些小的优化点堆积起来的效果是非常显著的。第二, AP 性能优化,OceanBase 4.0 将OceanBase 3.2的TPC-H打榜能力开放出来,为其 AP 性能的较大提升提供了助益。

针对TP 性能, 近期我们进行了OceanBase 4.0和MySQL8.0的性能测试对比,在256个并发及以上的情况下,OceanBase 的性能高于 MySQL; 在200并发以下, OceanBase 的性能相比 MySQL 稍差。我们会持续优化,希望明年能在100并发及以上超过MySQL。

OceanBase 4.0版本有哪些关键特性|11月社区月报-6

图5 OceanBase 4.0和MySQL 8.0的性能测试对比

我们也做了一个扩展性的实验,将规格不断扩大,在 4C、8C、16C、32C、64C 的规格中,性能接近线性提升。

OceanBase 4.0版本有哪些关键特性|11月社区月报-7

图6 OceanBase 4.0在不同规格机器的性能表现

将 OceanBase 社区版 4.0与OceanBase 社区版3.1.0进行 TPC-H 100GB测试对比,按照顺序执行22条查询SQL。从数据上来看,整体性能提升了5倍。

OceanBase 4.0版本有哪些关键特性|11月社区月报-8

图7 OceanBase 4.0 与 OceanBase3.1 性能对比

我们将OceanBase 社区版4.0.0 与Greenplum 6.22.1进行TPC-H性能对比,从实际测试数据上可以看到,同等硬件条件下,OceanBase 社区版4.0 的AP能力是Greenplum 6.22 的5-6倍,部分场景下性能差异可达到9倍。

OceanBase 4.0版本有哪些关键特性|11月社区月报-9

图8 TPC-H 100 GB Results (By Query)

OceanBase 4.0版本有哪些关键特性|11月社区月报-10

图9 TPC-H 100 GB Results (Total)

关键特性6:安装部署简化

与以往版本相比,OceanBase 4.0版本的安装部署简化为了三步(见图10):下载离线安装包、解压安装、执行obd demo。执行这三步就能获取到一个单机版的 OceanBase,也可以用该步骤部署多机版,只需将最后一步改成编辑配置一个文件,再去安装部署即可。目前,已经有很多用户正在使用该步骤,如果大家在使用过程中遇到问题,欢迎加入技术答疑群(群号:33254054)一起交流。

OceanBase 4.0版本有哪些关键特性|11月社区月报-11 图10 OceanBase 4.0的安装部署流程

除了上述六个关键特性,我们还增设了很多功能:

  • 通过 LOB 功能,MySQL 模式支持 4G,Oracle 模式支持 TB 级别;
  • JSON 类型支持,适应更多业务场景,也正在尝试 GIS 类型的支持;
  • DBLink 功能支持写入,打通与传统数据库互操作能力;
  • 预计明年实现 MySQL binlog 接口,以便 MySQL 生态工具接入;
  • 表锁功能,兼具单机数据库的使用体验和分布式的扩展能力;
  • 租户隔离能力进一步完善,I/O 纳入隔离体系。

当然,OceanBase 4.0版本的能力远不止本文提到的这些,建议大家亲自测试,感受这些有趣的特性。在众多测试的小伙伴中,叶金荣老师反馈了data base断连的问题,该问题已经在4.0 BP2 版本被修复了。

OceanBase 4.0版本有哪些关键特性|11月社区月报-12

图11 OceanBase 4.0 BP2 BUG修复

OceanBase 4.0版本有哪些关键特性|11月社区月报-2

图12 OceanBase 4.0 BP1 BUG修复

OceanBase 4.0版本有哪些关键特性|11月社区月报-1

图13 OceanBase 3.1.4 BP2 BUG修复

OceanBase 4.0 在开源模式的变化

除了开源OceanBase 4.0版本外,本次还开放了OceanBase master分支。其实,早在3.1版本时,我们就把 3.1 release 版本开源了,而它只是 GitHub 上的一个 master(见图5),出于开源版本应较为稳定的考虑,没有开源master 分支。

OceanBase 4.0版本有哪些关键特性|11月社区月报-15

图14 开源模式的变化

OceanBase 4.0开源后,我们将最新的正处于迭代期的代码分享出来,我们期待和用户一起交流、讨论研发流程,让用户看到OceanBase 在设计方面的思考和变化,也希望有更多开发者能够参与到OceanBase 项目中, 和我们一起把OceanBase 做得更好。

我们统一了社区版和企业版的代码,包括文档、部署方式、版本号,未来将在同一个分支进行开发,实时同步代码,并支持社区版原地升级到同版本号的企业版。

此外,开源模式的变化还值得大家关注的是,MySQL 租户下的所有功能基本都开放了,功能与企业版基本一致,包括行列混存、向量化引擎、存储过程(包括自定义函数)、触发器,以及更多的字符。未来在OceanBase 4.1版本中,也会开放主备库。

未来规划

在今年11月提出单机分布式一体化的架构后,公有云上已经有30+业务正在试运行或已经上线该架构,开源社区有30+位用户试跑OceanBase 4.0(部分用户已上线),支付宝内部也有10+个业务运行OceanBase 4.0。我们在保证以上用户正常运行的前提下,再根据QA团队的评估迭代新版本和功能。如果评估通过,春节前发布 4.0 稳定版。12月中旬发布 OMS 4.0 社区版,方便用户使用 OMS4.0 将 MySQL 数据迁移到 OceanBase中。

我们也将在安装层面做出较大改进——安装白屏化,简单来说,就是用户可以在一个图形化界面上安装 OceanBase,预计2023年1月推出。同时推出 OCP 的轻量版并开源,现在的OCP是集中式的OCP,它支持很多OceanBase 集群,但存在“鸡生蛋蛋生鸡”的问题。当用户在安装 OCP的时候,要先安装一个 OceanBase,导致用户上手门槛比较高, 体验并不好。OCP 轻量版可以直接将集群管理起来,用户也可以看到很多的监控数据,并且做一些轻量级的运维工作,降低资源消耗。

最后,向大家透露一点 OceanBase 4.1版本的消息。OceanBase 4.1 除了主备库外,自动负载功能和小型化也值得关注。我们期望未来的社区月报能够让大家获取、学习到更多关于 OceanBase的动态和知识,我们也会分享更多开发者向的有趣内容。

建立一个学得轻松,玩得开心,用得放心的开放社区。

我们每个月都会和大家展开一次社区进展的汇报沟通会,希望通过更多的互动交流让OceanBase 开源社区更加透明,实现信息共享,也希望能营造更加轻松的氛围,让大家可以在此畅所欲言、答疑解惑。详情可在GitHub Discussions 版块查阅。

欢迎持续关注 OceanBase 技术社区,我们将不断输出技术干货内容,与千万技术人共同成长!!!

搜索🔍钉钉群(33254054),或扫描下方二维码,还可进入 OceanBase 技术答疑群,有任何技术问题在里面都能找到答案哦~

OceanBase 4.0版本有哪些关键特性|11月社区月报-16

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论