1 分布式数据库概述

在当今数据驱动的商业环境中,分布式数据库因其可扩展性、高可用性和卓越的性能而备受关注。随着企业数据规模的不断膨胀和业务复杂度的增加,传统单机数据库已难以满足现代应用的需求。国产分布式数据库在这一领域取得了长足进步,其中 TiDB、OceanBase 和 PolarDB 作为具有代表性的产品,各自拥有独特的设计理念和优势。本文将深入剖析这三款分布式数据库的架构特点、性能表现及适用场景,为您的数据库选型提供全面的技术参考。

2 TiDB 架构深度解析

2.1 整体架构与设计哲学

TiDB 被设计为一款同时支持在线事务处理 (OLTP) 与在线分析处理 (OLAP) 的融合型分布式数据库产品,其核心目标是提供一站式的 OLTP、OLAP、HTAP 解决方案。TiDB 采用分层架构,将整体架构拆分成多个模块,各模块之间互相通信,组成完整的 TiDB 系统。

TiDB 分布式数据库的三个核心组件包括:

TiDB Server:作为无状态 SQL 层,负责接受客户端的连接、执行 SQL 解析和优化,并生成分布式执行计划。TiDB Server 不存储数据,只是解析 SQL,将实际的数据读取请求转发给底层的存储节点。

PD (Placement Driver) Server:作为整个 TiDB 集群的元信息管理模块,负责存储每个 TiKV 节点实时的数据分布情况和集群的整体拓扑结构,提供 TiDB Dashboard 管控界面,并为分布式事务分配事务 ID。PD 由至少 3 个节点构成,拥有高可用的能力,是集群的"大脑"。

存储节点:包括 TiKV Server 和 TiFlash。TiKV 负责存储数据,是一个分布式的提供事务的 Key-Value 存储引擎;TiFlash 则是一类特殊的存储节点,数据以列式的形式进行存储,主要功能是为分析型的场景加速。

2.2 关键技术特性

2.2.1 数据存储模型

TiKV 选择 Key-Value 模型,并且提供有序遍历方法。TiKV 数据存储的两个关键点包括:实现一个巨大的 Map(存储 Key-Value Pairs),以及保证 Map 中的 Key-Value pair 按照 Key 的二进制顺序有序。

在持久化存储方面,TiKV 把数据保存在 RocksDB 中,具体的数据落地由 RocksDB 负责。RocksDB 是由 Facebook 开源的一个优秀的单机 KV 存储引擎,可以满足 TiKV 对单机引擎的各种要求。

2.2.2 数据一致性保证

TiKV 通过 Raft 协议来保证单机失效的情况下数据不丢失不出错。简单来说,就是把数据复制到多台机器上,这样某一台机器无法提供服务时,其他机器上的副本还能提供服务。

在数据分片方面,TiKV 按照 Key 划分 Range。某一段连续的 Key 都保存在一个存储节点上。将整个 Key-Value 空间分成很多段,每一段是一系列连续的 Key,称为一个 Region。每个 Region 中保存的数据默认不超过 96MB。

2.2.3 分布式事务与 MVCC

TiKV 实现了多版本并发控制 (MVCC),其事务采用的是 Google 在 BigTable 中使用的事务模型:Percolator。这使得 TiDB 能够支持完整的分布式 ACID 事务,满足高并发场景下对数据一致性的要求。
2.2.4 MySQL 兼容性

TiDB 兼容 MySQL 5.7 协议和 MySQL 生态,这意味着用户可以在不修改应用程序任何代码和配置的情况下,将 MySQL 数据库迁移至 TiDB。这一特性大大降低了迁移成本和学习曲线。

2.3 新一代架构演进:TiDB X

近期,TiDB 社区推出了全新的数据库架构——TiDB X,这一新架构引入了对象存储(Object Storage) 作为核心元素,构建了一个面向未来 AI 时代的数据库体系。

TiDB X 将计算与存储分离,使得计算层与存储层可以独立伸缩。这一设计的优势在于,AI 应用通常需要处理海量的数据集,将计算与存储解耦,可以有效避免存储瓶颈对计算性能的影响。

3 OceanBase 架构深度解析

3.1 整体架构与设计哲学

OceanBase 是由蚂蚁集团自主研发的原生分布式关系型数据库,其核心特点是高可用、强一致、线性扩展,支撑支付宝、网商银行等万亿级业务场景。OceanBase 采用无共享(Shared-Nothing)设计,支持在线水平扩展,扩容时业务无感知。

OceanBase 的架构设计围绕以下核心原则:

. 多副本 Paxos 协议:数据同步依赖多数派(如 3 副本中 2 个确认即提交),既保证强一致性,又容忍节点故障。
. 计算与存储分离:支持透明的可扩展能力,通过分布式事务以及全局时间戳,实现了计算能力以及存储空间的无限水平扩展。
. 混合事务处理:HTAP 融合引擎使得一套系统能够同时处理 OLTP(高并发交易)和 OLAP(实时分析) 。

3.2 核心技术特性

3.2.1 金融级高可用

OceanBase 采用 Paxos 协议,通过数据多副本,基于普通 PC 服务器实现主备自动切换,且不丢失一行数据,实现了 RPO=0,RTO<30 秒的高可用指标。即使整个机房故障,数据也能零丢失,服务分钟级恢复。

从容灾架构来看,OceanBase 支持多可用区、多 Region 部署,发生故障时,可以根据指定的优先级,自动切换到一个健康的可用区
。具体部署模式包括:

. 可用区容灾:单区域 3 可用区部署,RPO=0,RTO 不超过 30 秒,可抵御个别硬件故障和可用区灾难。
. 区域容灾:三区域 5 可用区部署,RPO=0,RTO 不超过 30 秒,可抵御个别硬件故障、可用区灾难和区域灾难。

3.2.2 分布式事务优化

OceanBase 的分布式事务通过两阶段提交(2PC) 进行优化,通过"异步提交"降低延迟,用户感知的 Commit 响应比传统数据库快 30%+。这一优化使得 OceanBase 在高并发场景下仍能保持出色的事务处理性能。

3.2.3 多租户隔离

OceanBase 支持多租户隔离,单个集群可同时服务多个业务,资源隔离且成本降低 50%+。这一特性使得 OceanBase 特别适合大型企业或云服务提供商,能够在一个集群内部为不同业务或不同客户提供隔离的数据库服务。

3.2.4 兼容性优势

OceanBase 全面兼容 MySQL 以及 Oracle 两种模式,原来的代码、应用程序只需做较小的改动就可以直接使用 OceanBase。这对正在从 Oracle 迁移到分布式数据库的企业特别有吸引力,可以大幅降低迁移成本和风险。
3.3 性能表现

OceanBase 在处理峰值方面表现卓越,达到 6100 万次/秒的业内纪录,单集群最大数据量超过 3 PB,最大单表行数达万亿级。在 2020 年,OceanBase 通过 TPC-C 基准测试打破世界纪录(7.07 亿 tpmC),展现了其卓越的性能能力。

4 PolarDB 架构深度解析

4.1 整体架构与设计哲学

PolarDB 是阿里巴巴自研的新一代云原生数据库,采用计算与存储分离的设计理念。在计算存储分离架构下,PolarDB 利用了软硬件结合的优势,提供具备秒级弹性、高性能、海量存储、安全可靠的数据库服务。

PolarDB 提供两种主要版本:

PolarDB MySQL 版:100% 兼容原生 MySQL 及阿里云 RDS MySQL。

PolarDB PostgreSQL 企业版:100% 相容原生 PostgreSQL 的多个版本,包括 PostgreSQL 11/14/15/16。

4.2 核心架构特点

4.2.1 一写多读架构

PolarDB 采用多节点集群架构,一个集群包含一个主节点和多个只读节点。具体而言:

PolarDB MySQL 版边缘集群:一个集群版系列集群包含一个主节点和最多 7 个只读节点。
PolarDB PostgreSQL 企业版:一个集群包含一个主节点和最多 15 个只读节点。

主节点处理读写请求,只读节点仅处理读请求。通过集群地址,SQL 请求自动转发到 PolarDB 集群的各个节点,提供汇总、高吞吐的并发 SQL 处理能力。

4.2.2 计算与存储分离

PolarDB 采用计算与存储分离的设计,满足公有云环境下根据业务发展弹性扩展集群的刚性需求。数据库的计算节点仅存储元数据,而将数据文件、Redo Log 等存储于远端的存储节点。

这种设计的优势包括:

快速故障恢复:主节点故障时,只读节点可以快速切换为主节点。
弹性扩展:存储空间支持在线扩容,不会受到单个数据库服务器的存储容量限制,可应对上百 TB 级别的数据规模。
降低成本:多个计算节点共享存储,新增只读节点时只需支付计算节点费用,大大降低扩容成本。

4.2.3 高速链路互联

数据库的计算节点和存储节点之间采用高速网络互联,并通过 RDMA 网络进行数据传送,使 I/O 性能不再成为瓶颈。这种高速互联确保了计算节点能够以极低的延迟访问存储节点上的数据,保证了整体性能。

4.2.4 数据可靠性与一致性

PolarDB 的存储节点数据采用多副本形式,确保数据的可靠性,并通过 Parallel-RAFT 协议保证数据的一致性。共用分布式存储的设计,彻底解决了主从非同步复制所带来的备库数据非强一致的缺陷,使得整个数据库集群在应对任何单点故障时,可以保证数据零丢失。

4.3 高性能特性

PolarDB 通过深度优化数据库内核,同时采用物理复制、RDMA 高速网络和分布式共享存储,大幅提高性能。具体性能指标包括:

. 支持超过 50 万次/秒的读请求
. 支持超过 15 万次/秒的写请求
. 分钟级配置升降级
. 秒级的故障恢复

5 三大分布式数据库全面对比

5.1 架构对比

为了更清晰地理解三款数据库的差异,以下是它们在关键架构特点上的对比:

架构特性 TiDB OceanBase PolarDB
架构理念 NewSQL,计算存储分离(TiDB X) 原生分布式,Shared-Nothing 云原生,计算存储分离
数据分片 Region(默认96MB) 分区表,Unit级别 分区表
一致性协议 Raft Multi-Paxos Parallel-RAFT
存储引擎 RocksDB(TiKV),列存(TiFlash) LSM-Tree 基于底层分布式存储
计算存储分离 TiDB X中支持 支持 原生支持
扩容方式 水平扩展 水平扩展 弹性伸缩

5.2 性能对比

根据一系列的基准测试,在读写密集型场景下,PolarDB-X 表现优异;在混合负载场景下,OceanBase 展现出较强的处理能力;TiDB 在读密集型场景中表现出色。

在 TPCH10G 测试中,三款数据库的表现也有所不同。需要注意的是,测试环境的数据量相对较小,单机内存都超过数据量 18 倍以上,这种情况下数据已经全部缓存到内存了,列存基本不起作用。测试结果对比如下:

查询 TiDB OceanBase PolarDB
Q1 0.82s 2.82s 1.15s
Q2 0.42s 1.17s 0.58s
Q3 0.43s 1.90s 0.95s
Q4 0.37s 2.63s 1.20s
Q5 0.61s 3.37s 1.85s
总计 11.41s 53.72s 15.60s

从测试结果看,TiDB 在纯 CPU 计算场景下表现优异,这反映了其 SQL 优化引擎的能力。而 OceanBase 在这个测试中表现的性能相对较弱,原因有可能如测试报告所言,开源版和用于打榜的企业版有差距,开源版中没有提供较好的 SQL 优化引擎。

5.3 可用性与可靠性对比

在高可用方面,三款数据库都提供了强大的容错能力,但实现方式有所不同:

TiDB:默认 3 副本情况下挂掉任意 2 节点可能存在业务可用性降低情况。但 TiDB 可以通过设置故障域来降低这种风险,比如三个副本分别放在三个故障域中,任意一个故障域中节点全部挂掉都不会影响集群运行。
OceanBase:采用三地五中心容灾架构,RPO=0,RTO<30秒,即使整个机房故障,数据零丢失,服务分钟级恢复。OceanBase 的高可用能力在大规模集群中表现优异,只要任意 2 个挂掉的节点不是同一个 Paxos 组中的,那么整体没有问题。
PolarDB:基于共享分布式存储的设计,彻底解决了主从异步复制所带来的备库数据非强一致的缺陷,使得整个数据库集群在应对任何单点故障时,可以保证数据零丢失。

5.4 兼容性与生态系统对比

兼容性 TiDB OceanBase PolarDB
MySQL 兼容 MySQL 5.7 协议和生态 兼容 MySQL 5.6 语法及客户端 100% 兼容原生 MySQL
其他数据库     - 兼容 Oracle 提供 PostgreSQL 兼容版本
开源情况 开源 社区版开源 商业产品

6 选型建议与总结
6.1 根据应用场景选择
6.1.1 TiDB 适用场景

TiDB 特别适合以下场景:

. HTAP 混合负载:需要同时处理在线事务和实时分析的场景。
. MySQL 生态迁移:希望从 MySQL 无缝迁移到分布式数据库,且对事务一致性有要求的应用。
. 云原生与 AI 原生应用:考虑未来架构演进,需要 AI 原生能力的企业。
. 大规模数据量:数据规模较大,需要水平扩展能力的场景。

6.1.2 OceanBase 适用场景

OceanBase 是以下场景的理想选择:

. 金融级应用:对数据一致性和可靠性有极高要求的金融业务。
. Oracle 迁移:计划从 Oracle 迁移到分布式数据库,希望降低迁移成本。
. 高可用性要求:需要 RPO=0,RTO<30 秒的高可用保障的业务。
. 多租户环境:需要在单个集群中服务多个业务,实现资源隔离的场景。

6.1.3 PolarDB 适用场景

PolarDB 特别适合以下场景:

. 云上部署:已经在或计划在阿里云上部署业务的应用。
. 读写分离:读多写少的场景,可以利用其一写多读架构。
. 弹性需求:业务波动大,需要快速弹性伸缩的场景。
. MySQL/PostgreSQL 兼容:希望保持与 MySQL 或 PostgreSQL 完全兼容。

6.2 选型综合考虑因素

在实际选型过程中,除了技术特性外,还需要考虑以下因素:

. 团队技术栈:如果团队熟悉 MySQL,TiDB 和 PolarDB MySQL 版的学习成本会较低;如果有 Oracle 经验,OceanBase 可能更容易上手。
. 总拥有成本:包括软件许可、硬件资源、运维人力成本等。OceanBase 和 PolarDB 在存储成本方面有一定优势。
. 运维复杂度:TiDB 和 OceanBase 提供全面的运维工具,但大规模集群的运维需要专业经验。
. 云生态集成:如果业务主要在阿里云上,PolarDB 有天然的集成优势;多云环境则 TiDB 和 OceanBase 可能更灵活。

6.3 总结

TiDB、OceanBase 和 PolarDB 都是优秀的国产分布式数据库,各自有着不同的设计理念和优势:

1.TiDB 的优势在于其 HTAP 能力、MySQL 兼容性和活跃的开源社区,适合需要同时处理事务和分析的场景。
2.OceanBase 的核心竞争力是金融级高可用、Oracle 兼容性和久经考验的稳定性,特别适合对数据一致性要求极高的金融业务。
3.PolarDB 的突出特点是云原生架构、计算存储分离和与阿里云服务的深度集成,适合云上部署特别是阿里云环境的业务。

在选择合适的分布式数据库时,关键是要结合自身的业务需求、技术团队背景和长期技术战略,进行全面的评估和测试。希望本文提供的技术分析和对比能够为您的数据库选型决策提供有价值的参考。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐