基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
数据分布概述
更新时间:2024-04-10 10:11:15
OceanBase 数据库参考传统数据库分区表的概念,把一张表格的数据划分成不同的分区( Partition )。在分布式环境下,为保证数据读写服务的高可用,OceanBase 数据库会把同一个分区的数据拷贝到多个机器。不同机器同一个分区的数据拷贝称为副本( Replica )。同一分区的多个副本使用 Paxos 一致性协议保证副本的强一致,每个分区和它的副本构成一个独立的 Paxos 组,其中一个分区为主副本( Leader ),其它分区为从副本( Follower )。主副本具备强一致性读和写能力,从副本具备弱一致性读能力。
Location Cache
OceanBase 数据库按分区组织用户数据,且每个分区有多个副本用于容灾。SQL 请求执行过程中需要知道分区的位置信息,用于路由到特定机器读写对应分区副本的数据。分区的位置信息称为 Location,每个observer 进程会有一个服务,用于刷新及缓存本机需要的分区 Location 信息,该服务称为 Location Cache 服务。
分区的 Location 信息持久化到了 OceanBase 数据库内置的表中,持久化 Location 的内置表称为 Meta 表。为解决集群自举的问题,不同类型表的 Location 信息是按层次组织的,不同类型的表的 Location 会持久化到不同的 Meta 表中。各级 Meta 表的内容如下所示:
__all_virtual_core_root_table:记录__all_root_table的 Location。__all_root_table:记录集群中所有内置表的 Location。__all_virtual_meta_table:记录集群中所有租户的用户创建的表的分区的 Location。
副本类型
根据分区副本存储的数据种类的不同,副本被划分成不同的类型,以支持不同业务在数据安全、性能伸缩性、可用性、成本等之间的选择。目前 OceanBase 数据库支持定义以下四种副本类型:
全能型副本
日志型副本
加密投票型副本
只读型副本
有关副本管理的详细信息,参见 副本概述 章节。
分布式一致性协议
OceanBase 数据库使用 Paxos 协议在同一分区各副本间同步事务日志,多数派同步成功才能提交。缺省情况下读、写操作在主分区上保证强一致;备副本支持弱一致性读,允许读取某一个稍旧版本的数据。
数据均衡
OceanBase 数据库通过 RootService 管理租户内各个资源单元间的负载均衡。不同类型的副本需求的资源各不相同,RootService 在执行分区管理操作时需要考虑的因素包括每个资源单元的 CPU、磁盘使用量、内存使用量、IOPS 使用情况。经过负载均衡,最终会使得所有机器的各类型资源占用都处于一种比较均衡的状态,充分利用每台机器的所有资源。
副本均衡
RootService 会通过副本迁移的方式,调整租户和副本在各个 Unit 上的分布情况。
Leader 均衡
在副本均衡的基础上,RootService 会根据租户 Primary Zone 等因素,均衡各机器分区 Leader 数目。通过把分区 Leader 聚集到同一机器上,减少分布式事务执行的可能,减少业务请求的 RT;通过把分区 Leader 在多机上打散,最大限度利用机器资源,提高系统吞吐能力。