分布式关系数据库OceanBase与TiDB哪个更好( 二 )

从上述分析可以看出,OceanBase与TiDB集群均具备水平扩展的特性,此外 OceanBase实现了租户资源管理功能,支持租户的水平扩展,具备按需分配的能力,但是当前版本静态分区的方式对业务使用不够透明,需要在建表的同时确定合理的分区方式和分区数量;而TiDB Region自动分裂的特性,使得其内部数据切分对业务是透明的,使用起来较为方便,但在实际测试过程中,也会遇到少数Region分裂造成服务性能抖动的现象 。
高可用单点故障时单机数据库不得不面对的又一难题,传统的主从方案具备一定的可用性和容灾能力,但是并不完全可靠:备机故障时,主备同步会从最大保护模式(实时同步 Redo-Log)切换到最大性能模式(异步同步 Redo-Log),带来丢失数据的风险;主机故障时备机一般主动切换为主(避免脑裂问题),需要人工干预,这样则存在较长时间无法提供服务的风险 。TiDB 与 OceanBase 均能规避单点故障问题,提供恢复时间目标 RTO <= 30s 及 恢复点目标 RPO = 0 最高级别的灾难恢复能力 。

  1. OceanBase 使用 Paxos 协议同步数据,同样允许半数以下节点故障 。此外前面我们提到了 zone 的概念,OceanBase 支持添加删除 zone 等操作,基于 zone 的管理操作 OceanBase 很容易实现同城多机房、两地三中心以及三地五中心等部署方案,实现跨机房、跨地区的容灾能力 。
  2. TiDB 使用 Raft 协议同步数据,允许半数以下节点故障,故障节点主副本所在 Region 重新选主恢复读写能力,备副本由于 Region 存在半数以上存活节点读写正常,后续 PD 还会主动调度失效的副本到正常节点上,保证 Region 健康 。此外 TiDB 支持设置隔离级别(跨数据中心、机房或者 Host),后续 PD 会根据集群拓扑信息调度迁移 Region Peers 以满足设置的隔离级别 。
Raft 与Paxos 都是生产环境下广泛使用的协议,都具备半数下节点故障的容忍能力,此外两者都支持对 Region(或分区)副本实现跨机房、跨地区或跨主机的隔离,比较而言 OceanBase 按 zone 组织 ObServe 的实现方案更加简单直观,便于业务使用 。
兼容 MySQL为了降低业务迁移与使用成本,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
【分布式关系数据库OceanBase与TiDB哪个更好】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 。
分布式关系数据库OceanBase与TiDB哪个更好

文章插图
 
写入测试写入测试中单个事务4条 SQL 语句,分别为更新索引字段、更新非索引字段、删除行与插入行,压测 QPS 数据如下,OceanBase 性能一直优于 TiDB,最佳性能也在 TiDB 之上 。
分布式关系数据库OceanBase与TiDB哪个更好

文章插图
 
总结上述测试只是一个简单的初步测试,后续我们会使用最新版本进行更全面与详细的对比测试 。总体上来说,TiDB 与 OceanBase 按照各自的方案实现了可扩展、高可用的特性,并且高度兼容 MySQL 协议与语法 。两者的一些区别包括:TiDB 底层 Region 动态分裂,单表计算、存储能力可以水平扩展;OceanBase 着重实现了集群资源管理功能,可为租户按需分配资源 。OceanBase使用静态分区方式,在业务使用时需合理规划分区,以得到更好的性能以及扩展性 。


推荐阅读