首批通过分布式安全可靠测评,为关键业务系统打造
系统架构
更新时间:2026-06-16 19:57:38
OceanBase 数据库支持无共享(Shared-Nothing,SN)模式和共享存储(Shared-Storage,SS)模式两种部署模式。
无共享(SN)模式的分布式集群架构是 OceanBase 数据库常用的部署方式。在 SN 模式下,各个节点之间完全对等,每个节点都有自己的 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,LS)中。每个日志流用于服务其所在节点上的多个 Tablet。为了能够保护数据,并在节点发生故障时不中断服务,每个日志流及其所属的 Tablet 有多个副本。一般来说,多个副本分散在多个不同的可用区里。多个副本中有且仅有一个副本接受修改操作,叫做主副本(Leader),其他副本叫做从副本(Follower)。主从副本之间通过基于 Multi-Paxos 的分布式共识协议实现了副本之间数据的一致性。当主副本所在节点发生故障时,一个从副本会被选举为新的主副本并继续提供服务。
在集群的每个节点上会运行一个叫做 observer 的服务进程,它内部包含多个操作系统线程。节点的功能都是对等的。每个服务负责自己所在节点上分区数据的存取,也负责路由到本机的 SQL 语句的解析和执行。每个节点上的 observer 服务进程之间通过 TCP/IP 协议进行通信。同时,每个服务会监听来自外部应用的连接请求,建立连接和数据库会话,并提供数据库服务。关于 observer 服务进程的更多信息,参见 线程简介。
为了简化大规模部署多个业务数据库的管理并降低资源成本,OceanBase 数据库提供了独特的多租户特性。在一个 OceanBase 集群内,可以创建多个互相之间隔离的数据库"实例",叫做租户。从应用程序的视角来看,每个租户等同于一个独立的数据库实例。不仅如此,每个租户可以选择 MySQL 或 Oracle 兼容模式。应用连接到 MySQL 租户后,可以在租户下创建用户、Database,与一个独立的 MySQL 库的使用体验一致。同样的,应用连接到 Oracle 租户后,可以在租户下创建 schema、管理角色等,与一个独立的 Oracle 库的使用体验一致。一个新的集群初始化之后,就会存在一个特殊的名为 sys 的租户,叫做系统租户。系统租户中保存了集群的元数据,是一个 MySQL 兼容模式的租户。
功能适用性
OceanBase 数据库社区版仅提供 MySQL 模式。
为了隔离租户的资源,每个 observer 进程内可以有多个属于不同租户的虚拟容器,叫做资源单元(Unit)。资源单元包括 CPU 和内存资源。每个租户在多个节点上的资源单元组成一个资源池。
为了实现 OceanBase 数据库对应用程序屏蔽内部分区和副本分布等细节,使应用访问分布式数据库像访问单机数据库一样简单,我们提供了 OceanBase 数据库代理 ODP(OceanBase Database Proxy,又称 OBProxy)服务。应用程序并不会直接与 OceanBase 数据库节点建立连接,而是连接 ODP,然后由 ODP 转发 SQL 请求到合适的 OceanBase 数据库节点。ODP 是无状态的服务,多个 ODP 节点通过网络负载均衡(例如,SLB)对应用提供统一的网络地址。
共享存储模式是为了在多云环境为用户提供更有性价比的数据库服务,OceanBase 数据库基于通用的对象存储实现了共享存储(SS)模式,在云上提供云原生数据库服务,降低数据库使用成本,提升性能和易用性。更多内容请参见存算分离系统架构