OBKV与HBase对比来了

2024年 5月 7日 49.9k 0

什么是OBKV

OBKV是在OceanBase关系型(关系型+SQL)的基础上发展而来,共享存储、共享生态,bypass SQL层,为用户提供更加简单高效的非关系型API接口,致力于在单一数据库下提供多种数据模型,满足用户不同场景下数据的多样性需求。

OBKV与HBase对比来了-1

OBKV整体架构

OBKV完全复用OceanBase的Shared-Nothing架构,各个节点之间完全对等,具备可扩展、高可用、高性能、低成本、云原生等核心特性。

OceanBase的完整架构图如下所示,但是OBKV服务会绕过SQL引擎直接和存储引擎打交道。

OBKV与HBase对比来了-2

OBKV能做什么

众所周知,OceanBase提供了完备的SQL能力,兼容MySQL、Oracle语法,和传统的RDBMS相比,OceanBase是一款真正意义企业级分布式数据库,传送门。

但是在蚂蚁有这样一些需求,他们的读写要求很简单,没有复杂的SQL需求,读写量巨大,数据规模都是TB起步,为了让这些用户请求的rt更低,吞吐量更大,使用更方便,OceanBase提供了直接和存储层交互的API。

通过使用OceanBase提供的API,可以绕过SQL层直接读写存储引擎中的数据。同时,OBKV提供多种非关系型数据模型的支持,充分发挥NoSQL和SQL共处的新架构优势,给用户带来独特的价值。

OceanBase的稳定性已经经受蚂蚁核心系统和双11大促多年检验。在OceanBase上直接支持NoSQL,是站在“巨人的肩膀上”直接拥有了OceanBase久经考验的架构优势:

  1. 让NoSQL拥有了OceanBase的金融级数据安全和高可用的服务
  2. 支持全球部署,例如OceanBase的“3地5中心”多地部署
  3. 原生的读写分离架构支持,弱一致性读可无限扩展
  4. 原生强大的弹性能力,适应“双11大促”快速在线扩容缩容的能力要求
  5. 成熟的基于sharding的水平扩展性,且通过多年实践更加适应蚂蚁金服的LDC架构(zdal支持)
  6. 直接使用OB的周边工具:备份恢复、导入导出、数据链路、OB云平台管控、历史库迁移平台等

OceanBase支持NoSQL不是简单的支持,而是要达到“1+1>2”的架构提升效果。

  1. NoSQL的API和SQL可以同时操作同一份数据而和谐共处;API提供灵活的业务模型和极高的访问性能,SQL提供强大的表达能力,例如join、order by、group by 等API无法描述的语义
  2. 让NoSQL数据模型拥有了ACID事务能力和严格的一致性模型;(一般的NoSQL数据库只提供行级事务和最终一致性)
  3. 同一个OceanBase租户可以同时支持API和SQL,有OB的地方就可以使用OBKV,极大缩减成本,提高交付效率
  4. OBKV共享OceanBase的生态体系,包括离线能力、高可用能力、极致性能、极优成本
  5. 让NoSQL数据模型拥有了SQL一样强大的数据类型表达能力,也拥有了存储端(相对于应用端)的高效计算能力;
  6. 借助OceanBase SQL强大的OLAP分析能力,未来将可以直接分析NoSQL生成的在线业务数据;
  7. 简化业务存储层架构。比如,有些复杂的业务同时使用关系数据库和NoSQL系统,需要复杂的机制保持数据一致,非常容易出错,影响业务的稳定性。业务架构师不再需要学习多种不同的存储系统的架构,可以利用有限的时间深钻一个系统。新业务也不需要一次次地进行存储选型、性能评测、模型评估,而可以聚焦于业务本身的价值,集中精力快速开发迭代占领市场;
  8. 同一个业务或相关业务的关系数据模型和NoSQL模型数据都存储在同一个OceanBase集群内,可以统一资源管理和调度,统一运维。一方面解放运维人员学习不同系统的成本,一方面提升全栈的稳定性。

如何使用OBKV

OBKV-宽表模型

基于tableAPI提供的接口,给应用提供HBase兼容API。目前,兼容hbase 0.94版本的特性。通过本模型提供的API,业务可以采用宽表模型(WideColumn)对数据建模。

存储模型

每个hbase table的每个column family,在hbase这个database下对应定义一个如下形式的关系表。

1. key分区
create table t1$cf1 (
  K varbinary(1024), 
  Q varbinary(256), 
  T bigint, 
  V varbinary(1048576) NOT NULL, 
  primary key(K, Q, T)) 
partition by key(K) partitions 97;

2. range分区
CREATE TABLE test$family (
    K varbinary(1024) NOT NULL,
    Q varbinary(256) NOT NULL, 
    T bigint(20) NOT NULL, 
    V varbinary(1024) DEFAULT NULL, 
    PRIMARY KEY (K, Q, T)) 
block_size=8192 partition by range(K) 
(PARTITION p0 VALUES LESS THAN (100), 
 PARTITION p1 VALUES LESS THAN (500), 
 PARTITION p2 VALUES LESS THAN MAXVALUE););

其中,

  • K列存储hbase表的rowkey
  • Q列存储column qualifier
  • T列存储时间戳版本timestamp,一般为自January 1, 1970 UTC后的 毫秒
  • V列存储值value
  • K, Q, T组成联合主键,其中T字段逆序(1.4不支持逆序索引,存储为负数),这样可以优化读取最新数据的操作
  • 使用主键前缀K列作为hash分区的分区键,分区数根据实际情况可调,OB 2.0起支持分裂
  • 通过这样的方式,一个HBase表的行的若干列数据,在关系表中存储为相邻的若干行,每一行存储Hbase的一个cell:<row, column family, column qualifier, timestamp, value>

分区方式

支持key分区,range分区和key前缀分区几种方式。

支持TTL

功能描述见http://hbase.apache.org/0.94/book/ttl.html

server端内部实现中,要过滤掉过期的数据。每个column family对应的关系表,在其comment属性中记录TTL参数(单位:秒),用于server内部过滤。同时,需要在历史库平台配置TTL过期任务。(新版本已经支持自动清理 参见)例如

alter table t1$cf1 comment='{"HColumnDescriptor": {"TimeToLive": 3600}}';

控制最大版本数

和前面TTL类似,通过配置HColumnDescriptor属性。和TTL属性可以同时配置。例如

alter table t1$cf1 comment='{"HColumnDescriptor": {"MaxVersions": 3}}';

多column family支持

根据目前了解到的业务,蚂蚁内部使用hbase的业务大多数没有使用多column family。(目前暂不支持)

HBase API

与上面的存储模型配合,客户端以tableAPI为基础,提供HBase兼容的API给应用。客户端100%兼容HBase接口,HBase业务无需改造,且可以通过中间件进行灰度平滑切换。

具体支持的操作间Java客户端文档介绍。

OBKV-HBase特性说明

概述

  • obkv-hbase具备金融级TP的能力,已广泛应用在公司内部各个业务;
  • obkv-hbaseapi兼容社区hbase0.94版本的接口,已经实现通用的宽表功能,其他功能也在开发中。

特性支持

OBKV与HBase对比来了-3

OBKV与Hbase对比

对比项\产品 Hbase OBKV 备注
部署成本 需要ZK、HDFS、HBase多个组件,部署成本相对高 OCP部署OB数据库即可 OBKV部署更简单
存储成本 主备架构每个机房都部署,三地五中心3hdfs* 3 = 9(1份数据8个副本) OBKV三地五中心,4个全副本,一个日志副本。4.2份数据 OBKV 节约 45% 存储空间; Hbase 也是 LSM-Tree 存储架构,但在同样压缩算法下,得益于 OB 变长微块,OBKV 仍有优势
副本数据一致性 基于HLOG的异步复制 PAXOS多数派同步强一致性 服务强一致场景,必选OBKV
机器故障 Region Server故障后部分region会出现RIT(Region-In-Transtion),应用有感知 内部自动选主,location cache刷新=>应用基本无感知。stop server标准应急动作,易于自愈 Hbase架构强依赖zk和hmaster;大规模场景下,容易出现RIT无法恢复的情况
同城/异地容灾能力 RTO = 3 minute(结合容灾控制平台+应用配置动态推送能力)RPO = 1 minute 内部选主,客户端自动感知,部署后则具备能力自适应容灾RTO ~ 30sRPO = 0 OBKV 金融级无损容灾
常见运维场景 集群扩容:新增Region ServerRegion均衡:只有基于region数的自动均衡能力(额外功能均需要开发jsp) 集群扩容:新增 OB Server租户扩容:垂直扩容规格&水平新增 unitPartition 均衡:内部自动均衡 或 外置 balancer 智能均衡 OBKV 运维手段丰富,对 DBA 非常友好。和OB数据库运维一致。
资源利用 复用分组,但会带来负面影响 OB Server容器化;租户在线伸缩调整 OBKV 资源利用率高
隔离程度 分组间资源隔离 租户级别:CPU、内存、鉴权等均隔离 OBKV隔离性更好
特性能力 二级索引不支持 基于表索引,很容易支持二级索引

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论