oceanbase架构、功能模块、数据存储、特性、sql流转层等概念详解

news2024/11/14 14:01:11

一、架构图

OceanBase 数据库采用无共享(Shared-Nothing)分布式集群架构,各个节点之间完全对等,每个节点都有自己的 SQL 引擎、存储引擎、事务引擎,运行在普通 PC 服务器组成的集群之上,具备高可扩展性、高可用性、高性能、低成本、与主流数据库高兼容等核心特性。
在这里插入图片描述

OceanBase 数据库的一个集群由若干个节点组成。这些节点分属于若干个可用区(Zone),每个节点属于一个可用区。可用区是一个逻辑概念,表示集群内具有相似硬件可用性的一组节点,它在不同的部署模式下代表不同的含义。例如,当整个集群部署在同一个数据中心(IDC)内的时候,一个可用区的节点可以属于同一个机架,同一个交换机等。当集群分布在多个数据中心的时候,每个可用区可以对应于一个数据中心。每个可用区具有 IDC 和地域(Region)两个属性,描述该可用区所在的 IDC 及 IDC 所属的地域。一般情况下,地域指的是 IDC 所在的城市。可用区的 IDC 和 Region 属性需要反映部署时候的实际情况,以便集群内的自动容灾处理和优化策略能更好地工作。根据业务对数据库系统不同的高可用性需求,OceanBase 集群提供了多种部署模式,关于部署模式的更多信息,参见 OceanBase 集群高可用部署方案简介。

在 OceanBase 数据库中,一个表的数据可以按照某种划分规则水平拆分为多个分片,每个分片叫做一个表分区,简称分区(Partition)。某行数据属于且只属于一个分区。分区的规则由用户在建表的时候指定,包括 Hash、Range、List 等类型的分区,同时还支持二级分区。例如,交易库中的订单表,可以先按照用户 ID 划分为若干个一级分区,再按照月份把每个一级分区划分为若干个二级分区。对于二级分区表,二级分区的每个分区是一个物理分区,而一级分区只是逻辑概念。一个表的若干个分区可以分布在一个可用区内的多个节点上。每个物理分区有一个用于存储数据的存储层对象,叫做 Tablet,用于存储有序的数据记录。

当用户对 Tablet 中的记录进行修改时,为了保证数据的持久化,需要记录 Redo 日志到 Tablet 对应的日志流(Log Stream)中。每个日志流服务了其所在节点上的多个 Tablet。为了能够保护数据,并在节点发生故障时不中断服务,每个日志流及其所属的 Tablet 有多个副本。一般来说,多个副本分散在多个不同的可用区里。多个副本中有且仅有一个副本接受修改操作,叫做主副本(Leader),其他副本叫做从副本(Follower)。主从副本之间通过基于 Multi-Paxos 的分布式共识协议实现了副本之间数据的一致性。当主副本所在节点发生故障时,一个从副本会被选举为新的主副本并继续提供服务。

在集群的每个节点上会运行一个叫做 observer 的服务进程,它内部包含多个操作系统线程。节点的功能都是对等的。每个服务负责自己所在节点上分区数据的存取,也负责路由到本机的 SQL 语句的解析和执行。这些服务进程之间通过 TCP/IP 协议进行通信。同时,每个服务会监听来自外部应用的连接请求,建立连接和数据库会话,并提供数据库服务。关于 observer 服务进程的更多信息,参见 线程简介。

为了简化大规模部署多个业务数据库的管理并降低资源成本,OceanBase 数据库提供了独特的多租户特性。在一个 OceanBase 集群内,可以创建多个互相之间隔离的数据库"实例",叫做租户。从应用程序的视角来看,每个租户等同于一个独立的数据库实例。不仅如此,每个租户可以选择 MySQL 或 Oracle 兼容模式。应用连接到 MySQL 租户后,可以在租户下创建用户、Database,与一个独立的 MySQL 库的使用体验一致。同样的,应用连接到 Oracle 租户后,可以在租户下创建 schema、管理角色等,与一个独立的 Oracle 库的使用体验一致。一个新的集群初始化之后,就会存在一个特殊的名为 sys 的租户,叫做系统租户。系统租户中保存了集群的元数据,是一个 MySQL 兼容模式的租户。

二、采用架构

Shared-Nothing 架构优点

易于扩展:高并发、大数据量提供高扩展能力。

内部处理自动化并行。

三、功能适用性

OceanBase 数据库社区版仅提供 MySQL 模式。

为了隔离租户的资源,每个 observer 进程内可以有多个属于不同租户的虚拟容器,叫做资源单元(Unit)。资源单元包括 CPU 和内存资源。每个租户在多个节点上的资源单元组成一个资源池。

为了实现 OceanBase 数据库对应用程序屏蔽内部分区和副本分布等细节,使应用访问分布式数据库像访问单机数据库一样简单,我们提供了 OceanBase 数据库代理 ODP(OceanBase Database Proxy,又称 OBProxy)服务。应用程序并不会直接与 OceanBase 数据库节点建立连接,而是连接 ODP,然后由 ODP 转发 SQL 请求到合适的 OceanBase 数据库节点。ODP 是无状态的服务,多个 ODP 节点通过网络负载均衡(例如,SLB)对应用提供统一的网络地址。

四、组件解析

cluster 集群是OB最上面一层,一套集群分布在不同的region 中,每个region可以有多个zone.每个zone可以有多个observer.同时observer中可以有多个租户。

region 物理概念:对应物理上的城市或者地域。集群有多个region时,数据库具有地域容灾能力。

zone 逻辑概念:一个region内可以有多个zone,ob的数据采用多副本方式存储,分别存储在不同的zone里面,由paxos协议选主。

observer是一个单进程软件,通常一台物理机或者虚拟服务器运行一个observer进程,我们称为节点。一个zone内可以有多个observer.

租户概念:一个OBserver内可以有多个租户,每个租户资源cpu可以超卖,内存隔离。

五、sql流转方式

接入层:对接连接,鉴权校验用户密码。

SQL层:语法词法解析,sql优化,生产执行计划。并执行。

事务层:原子性、隔离性。

均衡层:扩容、缩容 对应的分区块迁移。以分区块做迁移(分区块就是hase分区分为多个分区块)

复制层:数据同步的方式 log stream 日志流。类似于binlog。

存储层:内存表,磁盘表

六、高可用方案

  • 基于 Paxos 一致性协议的多副本高可用解决方案

该方案基于Paxos一致性协议实现,通常在同一个集群内通过多副本(例如,三副本或五副本)提供容灾能力。

在少数派副本不可用(三副本集群允许一个副本不可用,五副本集群允许两个副本不可用)时,数据库可以自动执行容灾切换并恢复服务,保证不丢数据(RPO = 0),故障恢复时间在 8 秒以内(RTO < 8s)。

  • 基于日志异步复制的物理备库解决方案

该方案类似于传统数据库的主备复制解决方案。两个或多个集群之间,允许以租户为粒度,通过异步复制 Redo 日志来构建租户级别的主备关系,提供计划内无损切换和故障时有损切换两种容灾能力。

该方案主要用于满足双机房或双地域场景下的容灾需求。主租户提供读写能力,备租户提供只读和容灾能力。在执行计划内无损切换时,主租户和备租户互换角色,不丢数据(RPO = 0),切换时间为秒级(RTO 为秒级)。

当主租户所在的集群出现故障后,可以执行有损切换,将备租户切换为主租户。此时不能保证不丢数据,RPO 大于 0,切换时间为秒级(RTO 为秒级)。

  • 基于仲裁的高可用解决方案

该方案是 OceanBase V4.1.0 版本新提供的一种高可用解决方案。该方案通过引入一个独立的仲裁服务,允许通过更少副本数提供良好的容灾能力。

这里以两个全功能副本和一个仲裁服务的部署架构为例:在一个全功能副本出现故障时,集群会在仲裁服务参与的情况下,自动执行容灾降级,保证数据不丢(RPO = 0),切换时间为秒级(RTO 为秒级);在故障节点服务恢复后,集群会自动探测并执行服务升级,恢复故障前的可用能力。在此过程中,仲裁服务仅参与同步和持久化少量的元信息,资源开销(CPU/内存/网络等)极小。

  • 同机房三副本

如果只有一个机房,可以部署三副本或更多副本,来达到机器级无损容灾。当单台 Server 或少数派 Server 宕机情况下,不影响业务服务,不丢数据。如果一个机房内有多个机架,可以为每个机架部署一个 Zone,从而达到机架级无损容灾。

  • 同城双机房物理备库

如果同城只有双机房,又想达到机房级容灾能力,可以采用物理备库,每个机房部署一个集群。当任何一个机房不可用时,另一个机房可以接管业务服务。如果备机房不可用,此时业务数据不受影响,可以持续提供服务;如果主机房不可用,备库需要激活成新主库,接管业务服务,由于备库不能保证同步所有数据,因此可能会丢失数据。

  • 同城三机房三副本

如果同城具备三机房条件,还可以为每个机房部署一个 Zone,从而达到机房级无损容灾能力。任何一个机房不可用时,可以利用剩下的两个机房继续提供服务,不丢失数据。这种部署架构不依赖物理备库,不过不具备地域级容灾能力。

  • 两地两中心物理备库

用户希望达到地域级容灾,但是每个地域只有一个机房时,可以采用物理备库架构,选择一个地域作为主地域,部署主库,另一个地域部署备库。当备地域不可用时,不影响主地域的业务服务;当主地域不可用时,备库可以激活为新主库继续提供服务,这种情况下可能会丢失业务数据。
更进一步,用户可以利用两地两中心实现双活,部署两套物理备库,两个地域互为主备。这样可以更加高效利用资源,并且达到更高的容灾能力。

  • 两地三中心加物理备库

如果用户在两个不同的地域共有三个机房,可以使用 “两地三中心加物理备库” 的方案提供地域级容灾能力。
我们将有两个机房的地域称为主地域,业务在主地域两个机房里各部署一个或两个全功能副本,数据库的读写服务在主地域提供。另外一个地域机房中部署仲裁服务和物理备库,提供容灾服务。
在主地域一个机房出现故障时,仲裁方案会自动执行降级,确保业务在秒级恢复,同时不丢失数据。在主地域两个机房同时出现故障时,需要将物理备库激活成主库提供服务,此时业务有损,RPO > 0。

  • 三地三中心五副本

为了支持地域级无损容灾,通过 Paxos 协议的原理可以证明,至少需要 3 个地域。该方案包含三个城市,每个城市一个机房,前两个城市的机房各有两个副本,第三个城市的机房只有一个副本。和两地三中心的不同点在于,每次执行事务至少需要同步到两个城市,需要业务容忍异地复制的延时。

  • 三地五中心五副本

与三地三中心五副本类似,不同点在于,三地五中心会把每个副本部署到不同的机房,进一步强化机房容灾能力。

七、存储架构

分为磁盘存储和内存存储

磁盘数据放在sstablen内

在 OceanBase 数据库中, 对于用户表每个分区管理数据的基本单元就是 SSTable,当 MemTable 的大小达到某个阈值后,OceanBase 数据库会将 MemTable 冻结,然后将其中的数据转存于磁盘上,转储后的结构就称之为 Mini SSTable 或者是 Minor SSTable。当集群发生全局合并时,每个用户表分区所有的 Minor SSTable 会根据合并快照点一起参与做 Major Compaction,最后会生成 Major SSTable。每个 SSTable 的构造方式类似,都是由自身的元数据信息和一系列的数据宏块组成,每个数据宏块内部则可以继续划分为多个微块,根据用户表模式定义的不同,微块可以选择使用平铺模式或者编码格式进行数据行的组织。

  • 宏块

    OceanBase 数据库将磁盘切分为大小为 2MB 的定长数据块,称之为宏块(Macro Block),宏块是数据文件写 IO 的基本单位,每个 SSTable 就由若干个宏块构成, 宏块2M固定大小的长度不可更改, 后续转储合并重用宏块以及复制迁移等任务都会以宏块为最基本粒度。

  • 微块

    在宏块内部数据被组织为多个大小为 16KB 左右的变长数据块,称之为微块(Micro Block),微块中包含若干数据行(Row),微块是数据文件读 IO 的最小单位。每个数据微块在构建时都会根据用户指定的压缩算法进行压缩,因此宏块上存储的实际是压缩后的数据微块,当数据微块从磁盘读取时,会在后台进行解压并将解压后的数据放入数据块缓存中。每个数据微块的大小在用户创建表时可以指定,默认 16KB,用户可以通过语句指定微块长度,但是不能超过宏块大小,语句如下。

    ALTER TABLE mytest SET block_size = 131072;
    

一般来说微块长度越大,数据的压缩比会越高,但相应的一次 IO 读的代价也会越大;微块长度越小,数据的压缩比会相应降低,但相应的一次随机 IO 读的代价会更小。另外根据用户表模式的不同,每个微块构建的时候可能以平铺模式(Flat)或编码模式(Encoding)分别进行构建。在目前版本中,只有基线数据可以指定使用编码模式组织微块,对于转储数据全部默认使用平铺模式进行数据组织。

内存数据放在memtablen内

OceanBase 数据库的内存存储引擎 MemTable 由 BTree 和 Hashtable 组成,在插入/更新/删除数据时,数据被写入内存块,在 HashTable 和 BTree 中存储的均为指向对应数据的指针。

**HashTable :**不适合对范围查询使用 HashTable。

**BTree:**单行的查找,也需要进行大量的主键比较,从根结点找到叶子结点,而主键比较性能是较差的,因此理论上性能比 HashTable 慢很多。

LSM-TREE 数据转储和并

在这里插入图片描述

  • 转储
    OceanBase 数据库中的转储即 Minor Compaction 概念可以理解和其他 LSM-Tree 架构数据库的 Compaction 概念类似,主要负责 MemTable 刷盘转成 SSTable 以及多个 SSTable 之间的 Compaction 策略选择以及动作。OceanBase 数据库中采用的是 leveled 结合 size tiered 的 Compaction 策略,大致可以分为三层,其中 L1 和 L2 就是固定的 leveled 层次,L0 层是 size tiered,L0 内部还会继续根据写放大系数以及 SSTable 个数进行内部 Compaction 动作。

  • 合并

    合并也就是 Major Compaction,在 OceanBase 数据库中也叫每日合并,概念和其他 LSM-Tree 数据库稍有不同。顾名思义,这个概念诞生之初是希望这个动作放到每天凌晨 2 点左右整个集群做一次整体的 Compaction 动作。合并一般是由每个租户的 RS 根据写入状态或者用户设置发起调度,每个租户的每次合并都会选取一个全局的快照点,租户内所有的分区都会用这个快照点的数据做一次 Major Compaction,这样每次合并租户所有的数据都基于这个统一的快照点生成相应的 SSTable,通过这个机制不仅能帮助用户定期整合增量数据,提升读取性能,同时还提供了一个天然的数据校验点,通过全局的一致位点,OceanBase 数据库能够在内部对多副本以及主表索引表进行多维度的物理数据校验。

八、核心特性

  • 高可用

支持同城/异地容灾,可实现多地多活,满足金融行业6级容灾标准,数据0丢失。

  • 高兼容

高度兼容MySQL和 Oracle,覆盖绝大多数常见功能。

  • 水平扩展

实现透明水平扩展,支持业务快速的扩容缩容。

  • 低成本

基于LSM-Treez的高压缩引擎,使存储成本降低70%-90%。

  • 实时HTAP

基于同一份数据同一个引擎,同时支持实时交易和实时分析两种场景,依靠Btree和hashtable实现

  • 安全可靠

代码完全自主研究,代码级可控,自主研发单机分布式一体架构。

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

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

相关文章

澎湃算力 玩转AI 华为昇腾AI开发板——香橙派OriengePi AiPro边缘计算案例评测

澎湃算力 玩转AI 华为昇腾AI开发板 香橙派OriengePi AiPro 边缘计算案例评测 人工智能&#xff08;AI&#xff09;技术正以前所未有的速度改变着我们的生活、工作乃至整个社会的面貌。作为推动这一变革的关键力量&#xff0c;边缘计算与AI技术的深度融合正成为行业发展的新趋势…

秒懂C++之类与对象(下)

目录 一.static成员 测试&#xff1a; 二.explicit关键字 三.友元&#xff08;少用&#xff09; 友元函数&#xff1a; 友元类&#xff1a; 四.内部类&#xff08;少用&#xff09; 五.&#xff08;扩展&#xff09;编译器的优化 一.static成员 测试&#xff1a; 实现一…

【分布式事务】怎么解决分布式场景下数据一致性问题

分布式事务的由来 拿充值订单举个栗子吧&#xff0c;假设&#xff1a;原本订单模块和账户模块是放在一起的&#xff0c;现在需要做服务拆分&#xff0c;拆分成订单服务&#xff0c;账户余额服务。原本收到充值回调后&#xff0c;可以将修改订单状态和扣减余额放在一个mysql事务…

邮件安全篇:邮件传输加密(SSL/TLS or STATRTTLS)

1. 前言 使用过邮件客户端的同学一定见过下面这张图。这是客户端账号配置界面&#xff0c;里面有SSL、STARTTLS选项。刚接触邮件客户端的同学肯定会有这些疑问&#xff1a;什么是SSL&#xff1f;什么是STARTTLS&#xff1f;两者有什么区别&#xff1f;具体该如何选择呢&#x…

首批通过 | 百度通过中国信通院H5端人脸识别安全能力评估工作

2024年5月&#xff0c;中国信息通信研究院人工智能研究所依托中国人工智能产业发展联盟安全治理委员会&#xff08;AIIA&#xff09;、“可信人脸应用守护计划”及多家企业代表共同开展《H5端人脸识别线上身份认证安全能力要求及评估方法》的编制工作&#xff0c;并基于该方法开…

创新驱动的力量:探索Web3在技术发展中的作用

随着科技的不断进步和创新&#xff0c;Web3作为新一代互联网技术范式&#xff0c;正在以其去中心化、安全、透明和可编程的特性&#xff0c;深刻影响着全球技术发展的方向和速度。本文将深入探讨Web3技术的核心概念、关键特征以及其在技术创新中的重要作用&#xff0c;展示其在…

【Android】Fragment的静态动态创建以及两种创建方式的生命周期

参考&#xff1a; 33.3-Fragment的创建-静态创建2_哔哩哔哩_bilibili Fragment的创建_从现有代码创建foutran-CSDN博客 【Android】Fragment的基本用法、Fragment和活动间的通信、Fragment的生命周期、动态加载布局的技巧_android fragment-CSDN博客 文章目录 Fragment的静态创…

贝锐蒲公英远程运维方案:即装即用、无需专线,断网也可远程维护

目前&#xff0c;公路、隧道、桥梁、航道&#xff0c;甚至是施工现场和工业生产环境等&#xff0c;都采用了实时监测方案。 通过部署各类传感器和摄像头等设备&#xff0c;现场视频画面和控制单元&#xff08;如PLC、工控机等&#xff09;数据可以实时回传&#xff0c;用于集中…

0711springNews新闻系统管理 实现多级评论

0611springmvc新闻系统管理-CSDN博客 0711springNews新闻系统管理项目包 实现多级评论-CSDN博客 数据库字段 需要添加父节点id&#xff0c;通过该字段实现父评论和子评论的关联关系。 对象属性 实现链表&#xff0c;通过一个父评论可以找到它对应的所有子孙评论。 业务层 实现…

linux集群架构--web服务器--nginx检查模块/算法/rewrite知识补充

web集群-负载均衡 轮询算法 &#xff08;1&#xff09;概述 决定负载均衡如何把请求分发给后端节点&#xff0c;这种分发的方式就是轮询算法 &#xff08;2&#xff09;轮询算法 面试题&#xff1a;说说常见nginx轮询算法 rr,wrr,ip_hash,lc算法&#xff08;最小连接数&…

CH03_布局

第3章&#xff1a;布局 本章目标 理解布局的原则理解布局的过程理解布局的容器掌握各类布局容器的运用 理解 WPF 中的布局 WPF 布局原则 ​ WPF 窗口只能包含单个元素。为在WPF 窗口中放置多个元素并创建更贴近实用的用户男面&#xff0c;需要在窗口上放置一个容器&#x…

基于 Three.js 的 3D 模型加载优化

作者&#xff1a;来自 vivo 互联网前端团队- Su Ning 作为一个3D的项目&#xff0c;从用户打开页面到最终模型的渲染需要经过多个流程&#xff0c;加载的时间也会比普通的H5项目要更长一些&#xff0c;从而造成大量的用户流失。为了提升首屏加载的转化率&#xff0c;需要尽可能…

怎么关闭 Windows 安全中心,手动关闭 Windows Defender 教程

Windows 安全中心&#xff08;也称为 Windows Defender Security Center&#xff09;是微软 Windows 操作系统内置的安全管理工具&#xff0c;用于监控和控制病毒防护、防火墙、应用和浏览器保护等安全功能。然而&#xff0c;在某些情况下&#xff0c;用户可能需要关闭 Windows…

通义千问AI模型对接飞书机器人-集成飞书机器人(2-2)

接上一篇 通义千问AI模型对接飞书机器人-模型配置&#xff08;2-1&#xff09; 1、通过飞书机器人对接ai的在线接口 参考文档&#xff1a;发送 HTTP 请求 1.1 创建飞书应用 创建流程 配置http请求 http请求地址上一篇百炼平台配置的应用地址 1.2 企业自建应用对接AI 添加应用…

小程序-5(vant组件+全局数据共享+分包+tabBar案例)

目录 1.使用npm包 小程序对npm的支持和限制 使用vant组件 使用CSS变量定制主题样式 API的promise化 2.全局数据共享 小程序中的全局数据共享方案 安装MobX相关的包 创建MobX的store实例 将Store中的成员绑定到页面中 在页面上使用Store中的成员 将Store中的成员绑定…

pyqt/pyside QTableWidget失去焦点后,选中的行仍高亮的显示

正常情况下pyqt/pyside的QTableWidget&#xff0c;点击input或者按钮失去焦点后 行的颜色消失了 如何在失去焦点时保持行的选中颜色&#xff0c;增加下面的代码&#xff1a; # 获取当前表格部件的调色板 p tableWidget.palette()# 获取活跃状态下的高亮颜色和高亮文本颜色&a…

防火墙内容安全综合实验

一、实验拓扑 二、实验要求 1&#xff0c;假设内网用户需要通过外网的web服务器和pop3邮件服务器下载文件和邮件&#xff0c;内网的FTP服务器也需要接受外网用户上传的文件。针对该场景进行防病毒的防护。 2&#xff0c;我们需要针对办公区用户进行上网行为管理&#xff0c;要…

仿源码大师主界面UI的iAPP源文件

仿源码大师首页主界面的布局 首页&#xff0c;分类&#xff0c;需求&#xff0c;我的 就只有这几个界面内容而已 资源静态 没有任何动画和功能 纯UI布局 纯UI布局 他的最新版已经不是这个UI布局 放心使用 以学习参考为目的&#xff0c;如有不妥望告知 原创&#xff0c;纯…

国内微短剧系统平台抖音微信付费小程序app开发源代码交付

微短剧作为当下热门的内容&#xff0c;结合抖音平台的广泛用户基础&#xff0c;开发微短剧付费小程序APP具有显著的市场潜力&#xff0c;用户对于短剧内容的需求旺盛&#xff0c;特别是在言情、总裁、赘婿等热门题材方面&#xff0c;接下来给大家普及一下微短剧小程序系统。 顺…

数据结构(5.2_3)——二叉树的存储结构

二叉树的顺序存储 #define MAXLEN 255struct TreeNode {ElemType value;//结点中的数据元素bool isEmpty;//结点是否为空 };void main() {TreeNode t[MaxSize]; } 定义一个长度为MaxSize的数组t&#xff0c;按照从上至下、从左至右的顺序依次存储完全二叉树中的各个结点 几个…