OceanBase社区版4.x核心技术解密

news2024/12/28 23:16:46

数字化时代,各行各业的数据量呈现爆发式增长,对于海量数据价值的挖掘和应用,正成为推动创新的主要力量,与此同时,数据计算复杂度正在提升。在此背景下,对于数据处理的基石数据库而言,正面临市场变局。集中式数据库、分库分表等传统解决方案难以面对海量数据带来的挑战,性能瓶颈、分析能力不足、成本高昂等问题逐渐凸显。分布式数据库凭借数据自动分布在多个节点,连接任何一个节点均可以对集群数据进行读写的天然优势及事务强一致等特性,将成为新一代数据管理解决方案。

本文根据 GIAC 全球互联网架构大会数据库论坛《OceanBase 社区版 4.x 核心技术解密》整理,分享嘉宾为 OceanBase 技术部技术专家郑晓锋,现负责 OceanBase 华南区技术开源布道工作。本次分享以原生分布式数据库 OceanBase 为例,从架构及技术特性到社区版及生态工具,再到版本规划及未来展望,与大家探讨数据管理解决方案。

提到分布式数据库,大家自然会想到规模化场景应用。OceanBase 也是在这样的场景下诞生的:2010 年,淘宝收藏夹业务量庞大到传统关系型数据库难以支撑,进而开始做分布式存储方案, OceanBase 0.1 版本就此诞生,大家可以理解为就是一个分布式存储的架构。当时 NoSQL 比较火,很多人因此觉得数据库是不是应该把存储层做分离,我们做了之后,发现存在一些问题, 比如在 TP 场景下对时延有要求的话,关系数据库用松耦合的设计在效率上有很大的开销。

为了解决这个问题,当迭代到 OceanBase 1.0 版本的时候,我们就改造成目前的一体化架构。从 1.0 到 2.0、3.0 包括现在 4.0 版本,其实都遵循了这个架构。OceanBase 整体架构很简单,只有一个 OBServer 节点,存储引擎、SQL 引擎、事务引擎都集成在里面。在 OceanBase 有更多的外部用户之后,我们发现用户使用的数据库通常不止一种 ,比如用户在使用 MySQL 的同时也在使用 Oracle 数据库。所以在 2.0 的版本,商业化时在多租户基础上,增加了 Oracle 兼容能力。在 3.0 版本里,我们进一步增强了兼容性和产品性能。

2021 年 6 月,OceanBase 开源了 3.1 版本,而企业版最新是 3.2 版本,所以在 3.x 版本下,如果去对比社区版和企业版,性能会有差别。到了 4.0 版本,我们现在称之为单机分布式一体化架构,社区版 MySQL 模式的内核能力跟企业版是完全一样的。

为什么我们称 4.x 的版本为单机分布式一体化架构呢?有两层含义:第一层含义是指单机分布式一体化架构既能做单机部署,又能做分布式部署;第二层含义是指在 OceanBase 集群里,即使部署分布式集群,如果租户只用了单机的资源,我们也认为该租户是单机形态。在这个过程中,单机和分布式的形态可以随意转化。

OceanBase 的灵活部署,除了单机形态与分布式形态外,还支持主备库部署。在 4.1 版本里面,OceanBase 主备库是基于 OSS 或者 NFS 归档日志传输做同步,类似 MySQL 主备库。相较于分布式数据库来说,主备库的形态还是会有 RPO≠0 的数据丢失,三副本部署可以更好地满足用户高可用和高扩展的需求。在更大规模的业务场景下,OceanBase 多租户能力帮助集群管理更轻松。举个例子,一个公司如果有上万台服务器,而 DBA 可能只有十几个,一个人如何管理上千个数据库实例,规模化运维场景下人力终有限。OceanBase 通过集群的多租户能力,可以将很多 MySQL 实例,集成到 OceanBase 集群里面,大大降低管理实例的数量。

在整个过程当中,我们看到 OceanBase 部署形态,都是适应企业业务发展的,不用为不需要的特性买单。

图片

图片

OceanBase 自研一体化架构兼容经典模式,实现了单机和分布式,TP 和 AP 的融合。得益于单机分布式一体化架构与原生分布式的特性,OceanBase 兼容经典模式,实现了 TP 和 AP 的融合,并通过全量数据校验真正实现了数据强一致、数据不丢失,高可用,平滑扩展无感知。

从架构层面来讲,OceanBase 使用普通服务器和数据中心网络组成的 Shared-Nothing 集群部署, 无需基于专用网络环境的 SAN 存储设备。集群原生自动管理计算资源和存储资源的分配和动态资源均衡。支持弹性水平或垂直扩缩容,读写性能可线性扩展。所有服务节点都支持 SQL 计算和数据存储,每个节点自主管理所服务的分区数据。整个集群只有一种数据库服务进程,无外部服务依赖,运维管理简单。对外提供统一的数据库服务,支持 ACID 事务和全局索引,对应用开发来说与单机无异。OceanBase 可以灵活的基于用户基础设施,支持同城三中心、两地三中心、三地五中心等多种架构。

从特性层面而言,下面分别从原生分布式、扩缩容、单机性能、HTAP、低成本、多租户介绍技术原理。

  • 原生分布式。众所周知,分布式数据库最基本的能力包括高扩展性、高可用性。对于高扩展性,OceanBase 分布式协议采用 Paxos,利用 OceanBase 集群原生的能力可以很方便地做横向、纵向扩容,提升资源利用率,节省成本;高可用方面,除了我们常说的多副本强一致,OceanBase 集群内部还会做数据副本之间的一致性校验、事务提交的一致性校验、数据落盘的校验等来保证数据的高可靠。

  • 扩缩容无感知。在增加 OBServer 机器后,集群会自动把旧节点的数据自动迁移到新的 OBServer 中,整个过程对应用是透明的。在蚂蚁内部,最大的归档库已经达到 PB 级别,利用多机拷贝,500M/S 的速度去迁移 TB 级别的节点只需几个小时。或许大家对此没什么感觉,那么以双十一为例,历年双十一,蚂蚁都会提前半个月在云上申请一批新的服务器,把不同用户的数据打散到更多可用区的机房里,承担双十一流量高峰。迁移过程中,先拷贝只读副本,最后再做 leader 秒级切换,等双十一高峰过后再回收资源,这就是 OceanBase 极致弹性的扩缩容能力。

  • 单机性能相当于单机数据库。一般来说,分布式数据库在保证水平扩展能力时,往往会牺牲单机性能。然而,在 OLTP 业务中,单个事务的处理时延增加往往是不可接受的。这导致在许多场景下,单机数据库替换为某些分布式数据库后,即使业务性能指标不增加,也需要许多台分布式数据库节点才能支撑原有业务规模,导致成本不降反升。

OceanBase 的单机分布式一体化架构,在单机部署时,性能与单机数据库相当,甚至比某些流行的开源单机数据库的性能更好。

  • 当三机三副本部署时,相同的性能同时提供比传统主备库更好的高可用能力。

  • 当节点机器规格提升时,提供了线性的垂直扩展性。

  • 当每个 Zone 部署多节点时,提供了线性的水平扩展性。

特别在以下三种情况,OceanBase 的查询和事务处理没有多机访问的开销:

  • 当 SQL 语句只涉及单机内的分区时,数据读写无需通过网络。

  • 当事务只涉及单机内的分区时,事务提交没有分布式提交协议的开销。

  • 当事务只涉及单机内的分区时,基于多版本并发控制的一致性快照读取无需远程访问全局时间戳服务。

单机分布式一体化架构,让 OceanBase 数据库能够适应从个人小站点到银行核心系统和巨型电商网站等各种规模的业务,用一个数据库产品伴随客户业务的成长。

具体而言,在分布式数据库 OLTP 应用场景下,单机读写能占到 80%,跨机读写约占到 20%。我们做单机分布式一体化的目标是把原来 80% 单机事务的性能支撑好,再针对另外 20% 跨机事务做性能优化。OceanBase 3.x 版本会对数据做预分区,每个分区一个日志流,日志流个数越多,消耗的 CPU 和内存也会更多。在分布式场景下,事务的原子性、持久性会靠多条日志流来共同保障,比如分布式事务的两阶段提交、Paxos 一致性协议等,系统开销相对单机的单条日志流会增多。

而在 OceanBase 4.x 版本,我们把多条日志流合并为一条日志流,极大降低了系统负载。虽然我们做了日志流的合并,但扩缩容的时候,集群会自动把数据迁移到另一个日志流里面,做数据的负载均衡,整个迁移动作都由底层自动完成,对应用透明。

除了我刚刚提到的合并日志流以外,也有一些其他方式来优化 OceanBase 的单机性能,比如说减少系统租户的开销,提供单机内并行的能力,内存中按需来加载元数据等等。我们对比了 OceanBase 和 MySQL 的单机性能,可以看到在 32C 的规格下,OceanBase 表现明显优于 MySQL。

图片

另一个测试体现 OceanBase 良好的垂直扩展性,可以看到在 CPU 资源翻倍的情况下,OceanBase 单机性能 Sysbench 压测 的 QPS 基本上也是成倍增长的,能充分利用上添加的硬件资源。

图片

  • HTAP,TP 与 AP 融合。企业级应用的业务场景通常可以分为两个类别:联机交易和实时分析,我们通常称为 OLTP 和 OLAP 的业务应用。大型企业往往会选择多款数据库产品分别支持 OLTP 和 OLAP 类的应用场景。这种组合式的解决方案需要数据在不同系统间进行流转,数据同步过程带来时间延迟和数据不一致的风险,多个不同的系统产生冗余数据,推高成本开销,往往会限制企业在激烈的市场竞争中快速调整业务。

针对轻量级实时分析的场景,我们希望 OceanBase 能同时支撑 TP 和 AP 业务需求。OceanBase 集群通常有三个副本,默认读写强一致性在主副本中操作,TP、AP 的需求实际上都在一份数据里完成。另外,在单机分布式一体化架构下,用户也可以做些灵活的设置以应对实际业务场景,比如读写分离配置。有个用户的实际案例,从 MySQL 分库分表的方案迁移到 OceanBase 集群,在 TCO(数据库总拥有成本)降低 35% 的情况下,AP 能力反而提升了 30%,这足以证明目前 OceanBase HTAP 的能力还是可以的。

  • 低成本,高压缩率。数据压缩是降低海量数据存储空间占用的关键手段。OceanBase 高压缩比的分布式存储引擎, 摒弃了传统数据库的定长数据块存储, 采用基于 LSM-Tree 的存储架构和自适应压缩技术,创造性地解决了传统数据库无法平衡“性能”和“压缩比”的难题,并基于数据日志分离方法的分布式存储技术,进一步降低存储成本,实现了高性能和低存储成本。基于 LSM-Tree 的存储引擎,利用编码压缩极大降低存储成本。

OceanBase 如何做到低成本?从节省机器资源与存储资源开始。基于以往的用户实践经验来看,在规模化场景下,比如从 MySQL 迁移到 OceanBase 中,同等规格的机器数据能减少;另外,基于 OceanBase 的存储引擎架构,底层使用行列混存方式组织数据,从 MySQL 迁移到 OceanBase 4.x 版本单副本的存储数据量对比一般在 1 : 5,当然,根据实际用户数据的特征,这个存储的比例会有所增减。

  • 多租户,资源隔离。数据库池化管理是云时代实现资源精细化管理的重要手段。OceanBase天然是多租户架构,在一个集群中同时运行多个数据库租户,每个租户可以视为一个独立的数据库服务,租户间数据和资源互相隔离,并且在集群内统一调度。支持在创建租户时选择不同的兼容模式,每个租户可单独配置数据副本数量、副本类型、存储位置及计算资源等。数据库集群整合平台化,多租户整合应用数据库,可在线扩展,在线调整配置,更好地帮助业务实现运维工作自动化。

两个月前,我们发布了OceanBase 4.1 的版本,这个版本提供了很多新的能力。

  • 第一个是功能性的需求,新增旁路导入功能,提升我们大数据批量的导入速度;开放了 OBKV,多模数据类型,如 GIS,以及 MySQL 8.0 兼容的强化。

  • 第二个是稳定性,主要是主备库的功能。4.1 的主备库是基于 OSS、NFS 来做的,未来我们也会做基于网络传输的主备库模式。

  • 第三个是易用性,4.1 我们集成了白屏化安装的工具,可以去部署轻量级的 OCP express,包括一键安装 OceanBase 集群。

  • 第四个是性能提升,4.1 版本相对于 4.0 版本,TP 性能在4C场景下提升 40%,AP 性能提升 15%。

图片

图片

此外,OceanBase 会与更多生态上下游伙伴合作,为用户从数据库替换前、迁移中和使用后的不同阶段提供全方位产品化提供便捷服务。在 OceanBase 社区生态工具中,大家使用最多的主要是 ODC(开发者工具)、OMS(数据迁移工具)、OCP(运维管理工具)。我们还做了轻量级的社区版 OCP express,在今年年初已经开源,开放了 API 接口。部署服务后,可以通过开放的 API 接口对接已经在使用的数据管理平台,提高运维效率,助力业务稳定增长。

OceanBase 社区版开源以后,4.x 版本 MySQL 模式社区版跟企业版能力完全拉齐。虽然 4.x 版本相对于 3.x 版本性能提升非常明显,但是在内核方面我们还是希望持续去优化。TP 场景下,我们会继续向小规格发力,希望给用户的体感就是,用单机的 OceanBase 实例比 MySQL 单机明显跑得更快,希望 OceanBase 能够为用户从小规格到大集群保驾护航。AP 的场景下,我们也会持续去补足功能性的需求,比如冷热分离、只读外表的能力,适应用户更多业务场景。

希望 OceanBase 数据库能够助力更多企业突破业务瓶颈,也希望越来越多的用户可以参与到OceanBase 社区共建中来,与 OceanBase 一起成长。

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

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

相关文章

基于Springboot实现的Echarts图表

概述 ECharts是百度开源的一个前端组件。它是一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等)&…

02_nodejs开发环境安装

02 【nodejs开发环境安装】 1.版本介绍 在命令窗口中输入 node -v 可以查看版本0.x 完全不技术 ES64.x 部分支持 ES6 特性5.x 部分支持ES6特性(比4.x多些),属于过渡产品,现在来说应该没有什么理由去用这个了6.x 支持98%的 ES6 特…

Matlab图像处理-图像反转

图像反转 图像反转变化实质上是将图像明暗两种灰度进行互补运算后互换处理,理论上是由反比变换所得,其表达式为: sL−1−r 其中L−1为该灰度级中最大灰度值。 在MATLAB中,常使用imadjust()或imco…

12 mysql char/varchar 的数据存储

前言 这里主要是 由于之前的一个 datetime 存储的时间 导致的问题的衍生出来的探究 探究的主要内容为 int 类类型的存储, 浮点类类型的存储, char 类类型的存储, blob 类类型的存储, enum/json/set/bit 类类型的存储 本文主要 的相关内容是 char 类类型的相关数据的存储 …

python常用包/库

目录 NumpypandasMatplotlibSeabornScikit-learnKerasOpenCV Numpy NumPy库是Python中一个广泛使用的数学库,主要用于处理多维数组和矩阵。它提供了许多用于数组操作的功能,包括数组创建、索引、切片、广播、数学运算、统计分析等。NumPy库还提供了许多…

3D点云处理:点云形态学腐蚀运算

文章目录 0. 测试效果1. 基本内容1.1 2D方法对点云进行腐蚀运算1.2 3D方法对点云进行腐蚀运算文章目录:3D视觉个人学习目录微信:dhlddxB站: Non-Stop_目标:去除点云的边缘噪声等;0. 测试效果 红色为腐蚀后的点云;白色为原始点云; 1. 基本内容 点云腐蚀是一种用于处理三维…

2.2 Vector<T> 动态数组(模板语法)

C数据结构与算法 目录 本文前驱课程 1 C自学精简教程 目录(必读) 2 动态数组 Vector(难度1) 其中,2 是 1 中的一个作业。2 中详细讲解了动态数组实现的基本原理。 本文目标 1 学会写基本的C类模板语法; 2 为以后熟练使用 S…

新功能上线!Salesforce Field Service人工智能创新

Salesforce Field Service是Service Cloud的扩展,可提供员工管理的全面视图。Field Service专为进行现场服务的员工而设计,例如服务技术人员、服务座席、调度员等。随着Salesforce平台上线越来越多的生成式AI新增功能(包括Sales Cloud、Marke…

Python学习教程:进程的调度

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 要想多个进程交替运行,操作系统必须对这些进程进行调度, 这个调度也不是随即进行的,而是需要遵循一定的法则,由此就有了进程的调度算法。 python更多源码/资料/解答/教程等 …

练习2:88. 合并两个有序数组

这里写自定义目录标题 题目解体思路代码 题目 给你两个按非递减顺序排列的整数数组 nums1 和 nums2,另有两个整数 m和 n ,分别表示 nums1 和 nums2中的元素数目。 请你合并nums2 到 nums1 中,使合并后的数组同样按非递减顺序排列。 注意&a…

python 笔记(3)——request、爬虫、socket、多线程

目录 1、使用requests发送http请求 1-1)发送get请求 1-2)发送 post 请求 1-3)发送 get 请求下载网络图片 1-4)使用 post 上传文件 1-5)自动维护 session 的方式 2、使用 os.popen 执行cmd命令 3、基于 beautif…

01_nodejs简介

01 【nodejs简介】 1.前言 Node 的重要性已经不言而喻,很多互联网公司都已经有大量的高性能系统运行在 Node 之上。Node 凭借其单线程、异步等举措实现了极高的性能基准。此外,目前最为流行的 Web 开发模式是前后端分离的形式,即前端开发者…

ArrayList、LinkedList、Collections.singletonList、Arrays.asList与ImmutableList.of

文章目录 ListArrayListLinkedListArrayList与LinkedList的区别快速构建list集合Collections.singletonListArrays.asListImmutableList.of Java集合类型有三种:set(集)、list(列表)和map(映射),而List集合是很常用的一种集合类型, List 我…

2.3 Vector 动态数组(迭代器)

C数据结构与算法 目录 本文前驱课程 1 C自学精简教程 目录(必读) 2 Vector<T> 动态数组&#xff08;模板语法&#xff09; 本文目标 1 熟悉迭代器设计模式&#xff1b; 2 实现数组的迭代器&#xff1b; 3 基于迭代器的容器遍历&#xff1b; 迭代器语法介绍 对迭…

电影《封神第一部》观后感

本周看了电影《封神第一部》&#xff0c;听说上映的时候&#xff0c;口碑就是非常不错的&#xff0c;算是补档吧&#xff0c;另外看网上的一些评论&#xff0c;也都似乎挺好的&#xff0c;虽然有段时间了&#xff0c;还是决定去看看&#xff0c;其实也是算是逃避新出的电影吧&a…

亚马逊的邮箱可以更改吗,修改亚马逊账户邮箱的方法

亚马逊的邮箱可以更改吗&#xff1f; 可以更改&#xff0c;但更改主户邮箱需要电话对身份进行深度验证。如果需要修改&#xff0c;可以先开case向客服说明情况&#xff0c;然后根据客服的指导步骤来操作即可。 修改亚马逊账户邮箱的方法 1、登录您的账户&#xff1a;打开亚马…

外贸爬虫系统

全球智能搜索 全球智能搜索 支持全球所有国家搜索引擎&#xff0c;及社交平台&#xff0c;精准定位优质的外贸客户&#xff0c;免翻墙 全球任意国家地区实时采集 搜索引擎全网邮箱电话采集 社交平台一键查看采集&#xff08;Facebook,Twitter,Linkedin等&#xff09; 职位…

Android SDK 上手指南||第九章 Manifest文件

第九章 Manifest文件 到目前为止&#xff0c;我们已经熟悉了Android项目中的各个组成部分&#xff0c;包括其资源。在今天的文章中&#xff0c;我们将以项目Manifest文件作为核心内容。 对于一个项目来说&#xff0c;Manifest既可以很简单、也可以很复杂&#xff0c;其具体情…

k8s环境部署配置

目录 一.虚拟机准备 二.基础环境配置&#xff08;各个节点都做&#xff09; 1.IP和hosts解析 2.防火墙和selinux 3.安装基本软件 4.配置时间同步 5.禁用swap分区 6.修改内核参数并重载 7.配置ipvs 三.docker环境&#xff08;各个节点都做&#xff09; 1.配置软件源并…

Sharding-JDBC介绍及分库分表实践

1.1 ShardingSphere简介 最早是当当网内部使用的一款分库分表框架&#xff0c;名字叫Sharding-JDBC&#xff0c;定位为轻量级 Java 框架&#xff0c;在 Java 的 JDBC 层提供的额外服务。 它使用客户端直连数据库&#xff0c;以 jar 包形式提供服务&#xff0c;无需额外部署和依…