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

一、架构图

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实现

  • 安全可靠

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3、宠物商店智能合约实战(truffle智能合约项目实战)

3、宠物商店智能合约实战&#xff08;truffle智能合约项目实战&#xff09; 1-宠物商店环境搭建、运行2-webjs与宠物逻辑实现3-领养智能合约初始化4-宠物领养实现5-更新宠物领养状态 1-宠物商店环境搭建、运行 https://www.trufflesuite.com/boxes/pet-shop 这个还是不行 或者…

C语言:数组-学习笔记(万字笔记)——翻新版

目录 前言&#xff1a; 1、 数组的概念 1.1 什么是数组 1.2 为什么学习数组&#xff1f; 2. ⼀维数组的创建和初始化 2.1 数组创建 2.2 数组的初始化 2.3 数组的类型 2.3.1 什么是数组类型&#xff1f; 2.3.2 数组类型的作用 3、 一维数组的使用 3.1 数组下标 3.2 数…

收银系统源码-千呼新零售收银视频介绍

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

无需业务改造,一套数据库满足 OLTP 和 OLAP,GaiaDB 发布并行查询能力

在企业中通常存在两类数据处理场景&#xff0c;一类是在线事务处理场景&#xff08;OLTP&#xff09;&#xff0c;例如交易系统&#xff0c;另一类是在线分析处理场景&#xff08;OLAP&#xff09;&#xff0c;例如业务报表。 OLTP 数据库擅长处理数据的增、删、改&#xff0c…

【计算机网络】0 课程主要内容(自顶向下方法,中科大郑烇、杨坚)(待)

1 教学目标 掌握计算机网络 基本概念 工作原理 常用技术 为将来学习、应用和研究计算机网络打下坚实基础 2 课程主要内容 1 计算机网络和互联网2 应用层3 传输层4 网络层&#xff1a;数据平面5 网络层&#xff1a;控制平面6 数据链路层和局域网7 网络安全8 无线和移动网络9 多…

【python】Numpy运行报错详细分析:IndexError: too many indices for array

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

【Langchain大语言模型开发教程】基于文档问答

&#x1f517; LangChain for LLM Application Development - DeepLearning.AI Embedding&#xff1a; https://huggingface.co/BAAI/bge-large-en-v1.5/tree/main 学习目标 1、Embedding and Vector Store 2、RetrievalQA 引包、加载环境变量 import osfrom dotenv import…

YOLOv2小白精讲

YOLOv2是一个集成了分类和检测任务的神经网络&#xff0c;它将目标检测和分类任务统一在一个单一的网络中进行处理。 本文在yolov1的基础上&#xff0c;对yolov2的网络结构和改进部分进行讲解。yolov1的知识点可以看我另外一篇博客&#xff08;yolov1基础精讲-CSDN博客&#xf…

【从零开始实现stm32无刷电机FOC】【实践】【6/7 CMSIS-DSP】

目录 导入CMSIS-DSP库使用CMSIS-DSP 点击查看本文开源的完整FOC工程 CMSIS-DSP库是ARM开源的、对ARM处理器优化的数学库&#xff0c;本文使用了其提供的三角函数、反park变换函数、park变换函数、clarke变换函数、PID控制器。 CMSIS-DSP原始代码仓库是https://github.com/ARM-s…

mongodb数据导出与导入

一、先去检查mongodump mongodump --version 如果报 mongodump version: built-without-version-string 或者其他的较老的版本&#xff0c;直接去下载最新的【传送门】 【以Ubuntu18.04为例】 安装工具 假设你下载的是 .tgz 文件&#xff08;适用于 Linux 系统&#xff09;&am…

【ARM】SMMU系统虚拟化整理

目录 1.MMU的基本介绍 1.1 特点梳理 2.功能 DVM interface PTW interface 2.1 操作流程 2.1.1 StreamID 2.1.2 安全状态&#xff1a; 2.1.3 HUM 2.1.4 可配置的操作特性 Outstanding transactions per TBU QoS 仲裁 2.2 Cache结构 2.2.1 Micro TLB 2.2.2 Macro…

昇思25天学习打卡营第23天|ResNet50图像分类

课程打卡凭证 ResNet网络 ResNet&#xff08;Residual Networks&#xff0c;残差网络&#xff09;是一种深度神经网络结构&#xff0c;它的核心思想是引入了“残差学习”来解决深度网络中的退化问题。在深度神经网络中&#xff0c;当网络层数增加到一定程度时&#xff0c;网络…

深入理解Linux网络(二):UDP接收内核探究

深入理解Linux网络&#xff08;二&#xff09;&#xff1a;UDP接收内核探究 一、UDP 协议处理二、recvfrom 系统调⽤实现 一、UDP 协议处理 udp 协议的处理函数是 udp_rcv。 //file: net/ipv4/udp.c int udp_rcv(struct sk_buff *skb) {return __udp4_lib_rcv(skb, &udp_…

什么是单例模式,有哪些应用?

目录 一、定义 二、应用场景 三、6种实现方式 1、懒汉式&#xff0c;线程不安全。 2、懒汉式&#xff0c;线程安全 3、双检锁/双重校验锁&#xff08;DCL&#xff0c;即 double-checked locking&#xff09; 4、静态内部类方式-------只适用于静态域 5、饿汉式 6、枚举…

Linux系统编程基础

Linux操作系统 Linux不是一个具体的操作系统&#xff0c;而是一类操作系统的总称&#xff0c;具体版本成为发行版。 Red Hat&#xff1a;目前被IBM收购&#xff0c;收费版&#xff0c;目前最大的Linux供应商CentOS&#xff1a; Red Hat退出的免费版Ubuntu&#xff1a;界面比较友…

【Gin】精准应用:Gin框架中工厂模式的现代软件开发策略与实施技巧(上)

【Gin】精准应用&#xff1a;Gin框架中工厂模式的现代软件开发策略与实施技巧(上) 大家好 我是寸铁&#x1f44a; 【Gin】精准应用&#xff1a;Gin框架中工厂模式的现代软件开发策略与实施技巧(上)✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 本次文章分为上下两部分&…

【C语言】动态内存管理(上)

文章目录 前言1.为什么要存在动态内存2. malloc和free2.1 malloc2.2 free2.3 使用实例&#xff08;malloc和free&#xff09; 3. calloc3.1 calloc例子 前言 本文开始将开始学习C语言中一个比较重要的知识点或者是操作——动态内存管理。由于本次的知识比较重要&#xff0c;为…

科技赋能,智慧粮仓视频综合管理方案助力粮食安全

一、背景需求 随着科技的快速发展&#xff0c;智慧化、智能化管理已成为各行各业的重要发展方向。粮食仓储作为国家粮食安全战略的重要组成部分&#xff0c;其管理的科学性和智能化水平直接关系到粮食的存储安全、品质保障和运营效率。 因此&#xff0c;TSINGSEE青犀提出一套…

GaussDB常见调优指南

文章目录 GaussDB常见调优指南一. Analyze 统计信息解析二. Explain 分布式计划解析三. 性能调优总体策略详解四. 性能调优之坏味道 SQL 识别五. 性能调优之好味道表定义六. 性能调优之 SQL 改写七. 性能调优之路径干预八. 性能调优之 Plan hint 运用九. 性能调优之 GUC 参数调…

Linux 12:多线程2

1. 生产者消费者模型 生产者消费者模型有三种关系&#xff0c;两个角色&#xff0c;一个交易场所。 三种关系&#xff1a; 生产者之间是什么关系?竞争 - 互斥 消费者和消费者之间?竞争 - 互斥 消费者和消费者之间?互斥和同步 两个角色&#xff1a; 生产者和消费者 一个交…