2021年6月1日,蚂蚁集团开源 OceanBase 代码,这款连续两年占领 TPC-C 榜首的数据库产品再次拥抱开源。而此时,在开源社区国产数据库的赛道上还有另外一位明星选手:TiDB。同为关系型数据库,两者都采用分布式架构,具备可扩展、高可用、兼容 MySQL 的特性,相同特性背后两者的实现却大相径庭,各有考量。接下来将对两者架构、特性与性能方面做一些介绍,希望能对业务了解、选择与使用上有一些帮助。
OceanBase 的核心集群架构主要包括 ObServer,ObProxy 2个模块,如下图所示:
TiDB 集群架构如下图,主要介绍其中 TiKV, TiDB, PD 3个模块。
随着数据量的增加,单机数据库不得不面对计算、存储能力不足的问题,传统的分库分表方案在解决问题的同时也引入了新的问题:对业务使用不透明,具有侵入性;跨库 SQL 语句受到限制;跨库语句难以100%保证事务特性等,针对这个问题,OceanBase和TiDB有不同的解决方案。
从上述分析可以看出,OceanBase与TiDB集群均具备水平扩展的特性,此外 OceanBase实现了租户资源管理功能,支持租户的水平扩展,具备按需分配的能力,但是当前版本静态分区的方式对业务使用不够透明,需要在建表的同时确定合理的分区方式和分区数量;而TiDB Region自动分裂的特性,使得其内部数据切分对业务是透明的,使用起来较为方便,但在实际测试过程中,也会遇到少数Region分裂造成服务性能抖动的现象。
单点故障时单机数据库不得不面对的又一难题,传统的主从方案具备一定的可用性和容灾能力,但是并不完全可靠:备机故障时,主备同步会从最大保护模式(实时同步 Redo-Log)切换到最大性能模式(异步同步 Redo-Log),带来丢失数据的风险;主机故障时备机一般主动切换为主(避免脑裂问题),需要人工干预,这样则存在较长时间无法提供服务的风险。TiDB 与 OceanBase 均能规避单点故障问题,提供恢复时间目标 RTO <= 30s 及 恢复点目标 RPO = 0 最高级别的灾难恢复能力。
Raft 与Paxos 都是生产环境下广泛使用的协议,都具备半数下节点故障的容忍能力,此外两者都支持对 Region(或分区)副本实现跨机房、跨地区或跨主机的隔离,比较而言 OceanBase 按 zone 组织 ObServe 的实现方案更加简单直观,便于业务使用。
为了降低业务迁移与使用成本,TiDB 与 OceanBase 都高度兼容 MySQL 协议与语法,TiDB 文档宣称 100% 兼容 MySQL 5.7 协议、MySQL 5.7 常用功能及语法,OceanBase文档则声明兼容 MySQL 5.6 绝大部分功能和语法,两者文档中都对 MySQL 不支持或者实现有差异的功能特性做了说明。
对于 MySQL 事务特性,TiDB 与 Oceanbase 均支持分布式事务。两者参考 google Percolator 实现两阶段提交,基于多版本并发控制为事务提供可重复读与快照隔离两种隔离级别,详细介绍可以参考 TiDB 文档、OceanBase 文档。
TiDB 与 OceanBase 都在官方文档中给出了压测方案与性能数据,但是两者给出的机器配置不同,这里使用公司机器搭建集群进行压测获得了一些性能数据供大家参考了解。
TiDB 使用5.0.0版本,OceanBase 使用3.1.0_CE社区版本,Sysbench 使用1.0.20版本。OceanBase 租户分配资源36个逻辑 CPU + 100 G 物理内存,TiDB 调整 RocksDB 缓存 100G。测试数据规模为16张表,单表1000万行数据,每次测试跑300秒。
机器 |
型号 |
服务 |
10.10.1.1 |
S04 |
TiKV、TiDB、PD、Sysbench |
10.10.1.2 |
S04 |
TiKV、TiDB、PD、Sysbench |
10.10.1.3 |
S04 |
TiKV、TiDB、PD、Sysbench |
10.10.1.4 |
S04 |
ObServer、ObProxy |
10.10.1.5 |
S04 |
ObServer、Sysbench |
10.10.1.6 |
S04 |
ObServer |
只读测试中单个事务中包含5条 SQL语句,分别为1次主键查询与4次主键范围查询(分别获取字段,字段和,字段排序以及字段排序后不同值),压测 QPS 数据如下,不难看出 TiDB 仅在32线程下 QPS 高于 OceanBase,其余线程测试下OceanBase 最佳性能优于 TiDB。
写入测试中单个事务4条 SQL 语句,分别为更新索引字段、更新非索引字段、删除行与插入行,压测 QPS 数据如下,OceanBase 性能一直优于 TiDB,最佳性能也在 TiDB 之上。
上述测试只是一个简单的初步测试,后续我们会使用最新版本进行更全面与详细的对比测试。总体上来说,TiDB 与 OceanBase 按照各自的方案实现了可扩展、高可用的特性,并且高度兼容 MySQL 协议与语法。两者的一些区别包括:TiDB 底层 Region 动态分裂,单表计算、存储能力可以水平扩展;OceanBase 着重实现了集群资源管理功能,可为租户按需分配资源。OceanBase使用静态分区方式,在业务使用时需合理规划分区,以得到更好的性能以及扩展性。
在2021年10月18日举办的DTCC 2021(第十二届中国数据库技术大会)中,OceanBase正式发布了开源3.1.1版本,新版本在原有性能优势基础之上,打通开源组件和开源的生态更好的协作在一起。譬如:支持 MySQL 5.7 驱动协议;开放了 TABLE API 接口让 OceanBase 数据库拥有 NoSQL 的能力,提供 KV 数据库访问能力;开放 CDC 接口,提供 OceanBase 对外数据同步接口;同时,新版本支持 20 多个生态工具,支持 Docker 部署,实现全量和增量的数据迁移。接下来我们也会对最新版本进行进一步的性能测试。
在DTCC大会上OceanBase进行了专场分享,其中也包括美团、哔哩哔哩、携程等公司都分享了他们使用OceanBase的经验及心路历程。OceanBase方也表示了其认真做开源、持续投入开源的决心和愿景。
如果这篇文章对你有帮助,还请帮忙点赞、转发 以下,你的支持会激励我们输出更多高质量的文章!