阿里云PolarDB登顶TPC-C:云原生数据库多主集群技术解析

阿里云PolarDB登顶TPC-C,揭秘其多主集群技术。通过RDMA等技术实现高性能横向扩展,突破单机瓶颈,为现代数字化业务提供核心基础设施。

原文标题:登顶TPC-C!阿里云自研数据库分布式扩展技术揭秘

原文作者:阿里云开发者

冷月清谈:

阿里云PolarDB云原生数据库以每分钟20.55亿笔交易的优异成绩登顶TPC-C基准测试排行榜,并以极具竞争力的单位成本刷新了TPC-C性能和性价比双榜的世界纪录。PolarDB MySQL版多主集群(Limitless)支持多主多写、内存融合、分布式存储和秒级横向扩展,通过RDMA/CXL等技术实现节点间事务和数据的高效融合,在保证事务一致性的前提下,实现高效的透明秒级横向跨机读写线性扩展。其核心技术包括:PolarTrans云原生事务系统,通过提交时间戳技术优化原生事务系统,提升事务处理性能;分布式快照一致性,利用RDMA共享内存CTS Log实现全局事务状态信息同步;软硬件协同的云原生分布式事务方案,加速事务Prepare和Commit阶段的执行;以及多机并行DDL和多样化的高可用方案,确保数据库系统的高可用和扩展性。此外,全局RO节点支持跨表/库的全局查询,并通过PolarProxy实现透明路由。

怜星夜思:

1、PolarDB的多主架构在应对高并发写入时,是如何保证数据一致性的?除了文中的RDMA和CTS Log,还有哪些关键技术或策略?
2、文中提到PolarDB在全球只读节点的设计上,避免了为RO节点存储额外的数据副本,节省了存储开销。这种设计方案有哪些潜在的风险或者限制?在哪些场景下可能不适用?
3、PolarDB通过深度融合RDMA/CXL等新型硬件来提升性能,这种软硬件协同的思路对数据库的未来发展有哪些启示?是否意味着未来的数据库需要更加依赖特定的硬件环境?

原文内容

近年来,云原生架构进一步推动了弹性扩展与低成本运维。其意义在于突破单机性能瓶颈,实现海量数据与高并发场景的支撑,通过多节点协同保障高可用与容灾能力,同时降低资源成本,并推动数据库从封闭系统向灵活、智能的分布式架构演进,成为现代数字化业务的核心基础设施。

日前,阿里云PolarDB云原生数据库以超越原记录2.5倍的性能一举登顶TPC-C基准测试排行榜,以每分钟20.55亿笔交易(tpmC)和单位成本0.8元人民币(price/tpmC)的成绩刷新TPC-C性能和性价比双榜的世界纪录。每一个看似简单的数字背后,都蕴含着无数技术人对数据库性能、性价比和稳定性的极致追求,PolarDB的创新步伐从未止步。

一、概述

本次TPC-C基准测试,我们所使用的是PolarDB for MySQL 8.0.2版。PolarDB MySQL版支持多主集群(Limitless),客户通过加读写节点(RW)的方式即可从PolarDB MySQL一主多读变配为PolarDB MySQL版多主集群(Limitless)

PolarDB MySQL版多主集群(Limitless)支持多主多写、内存融合、分布式存储、秒级横向扩展,支持单表读写透明的跨机扩展到海量节点。本次TPC-C基准测试中 PolarDB 以2340个读写节点的形态(规格为48核512GB),支持了每分钟20.55亿笔交易(tpmC)。从tmpC和price/tpmC刷新TPC-C性能和性价比双榜的世界纪录。

早期的云原生关系型数据库主要形态是基于存储和计算分离的一写多读形态,虽然其可以很好地替换原生或者托管的MySQL/PG数据库,但是因其单写架构限制了其写能力的扩展。随着云原生数据库技术的不断演进,支持大规模部署和横向读写扩展的云原生数据库PolarDB MySQL版多主集群(Limitless)功能就此诞生。其核心优势是可弹性扩缩计算节点且每个节点都可处理读写请求,可在多个节点上实现并发写入。此外,其在保留单机高性能,高弹性的同时,利用RDMA/CXL等技术,对节点间的事务和数据进行高效融合,在保证事务一致性的前提下,实现高效的透明秒级横向跨机读写线性扩展。

本篇文章将详细介绍PolarDB MySQL版多主集群(Limitless)的整体架构,以及支撑其成功登顶TPC-C的核心技术创新点。

二、技术深入解读

(一)PolarDB MySQL版多主集群(Limitless)整体架构

图1: PolarDB MySQL版多主集群(Limitless)架构图

PolarDB MySQL版集群包含多个RW计算节点、多个RO计算节点、可选的Cache Coordinator节点组成,其底层基于分布式共享存储。每个RW节点均可读可写,并通过RDMA/CXL高速网络和Cache Coordinators通信,Cache Coordinators 负责集群元数据管理和事务信息协调,同时支持CDC功能,负责输出统一的全局Binlog。

此外,该架构支持将单一分区表的不同分区动态分布到不同RW节点上,并通过分区裁剪模块判断执行计划应该路由到哪个RW节点。因此,可支持不同分区在各RW节点并发写入,实现写能力的横向扩展,能够极大提升集群整体的并发读写性能。并且,集群还支持跨节点的分布式查询、分布式DML、分布式DDL,并通过RDMA内存融合的方式保证跨节点事务的一致性和原子性。此外,设计了全局RO节点来支持全局查询/多表联合查询/列存查询加速。

PolarDB的集群中多个RW计算节点采用对称架构,即其单个RW节点包含了传统分布式数据库的CN(协调节点)和DN(数据节点)节点的功能,不再需要客户去单独配置CN节点和DN节点的数量。对称节点的设计有显著的优势:

  • 可充分提升资源利用率,避免因在不同负载下CN/DN某一个打满而另一个闲置的资源浪费;
  • 可降低CN/DN分离带来的额外的通信成本,提升性能;
  • 计算节点采用MySQL原始的语法解析/优化/执行器带来了100%的MySQL兼容性。

(二)高性能横向跨机读写扩展
1.PolarTrans云原生事务系统

InnoDB原生事务系统是基于活跃事务列表实现的,但维护活跃事务列表需要全局大锁保护,成本开销较大,在高并发场景下容易成为整个系统的性能瓶颈点。另外,考虑到分布式事务一致性方案大多基于提交时间戳方案(TSO/TrueTime/HLC等),因此,PolarTrans通过提交时间戳技术(CTS)优化原生事务系统,核心数据结构为CTS log,由一段ring buffer组成,事务ID trx_id通过取模映射到其对应的slot,每个slot存储trx指针和cts值(事务提交时间戳)。其优化的核心思想是移除对复杂数据结构的维护,事务状态迭代、可见性判断等核心事务逻辑, 都是通过CTS log来完成,更加轻量级;同时PolarTrans将大部分的逻辑进行无锁优化,因此,PolarTrans事务系统对于读写混合场景、纯写场景都有较大的性能提升。

图2:CTS Log 结构图

2.分布式快照一致性

InnoDB原生快照一致性读依赖活跃事务列表维护事务状态,提供事务可见性判断,该机制在分布式多写场景中暴露严重缺陷:维护集群跨节点的全局活跃事务列表,引发高频全局锁竞争,扩展性随节点数增长而急剧下降。PolarDB基于PolarTrans以及RDMA来构建分布式事务系统,提供分布式快照一致性能力:

(1)集群中所有节点通过RDMA进行点对点互连,跨机共享RDMA注册的内存CTS Log来实现全局事务状态信息同步和跨物理机直接更新,避免通过中心节点维护全局活跃事务列表,同时CTS Log提供了事务远程提交,状态查询等能力。

(2)通过TSO或HLC两种时间戳管理方案,生成事务提交时间戳,分布式写事务的所有子事务通过相同的时间戳进行原子提交,分布式读通过统一的时间戳结合CTS Log判断数据可见性,保证分布式读一致性。

3.多机事务一致性:云原生分布式事务

我们设计实现了一种软硬件协同的云原生分布式事务方案,可实现良好的多机写扩展性。核心思想是利用RDMA等新型硬件低延迟优势,加速提交流程中Prepare阶段和Commit阶段的执行。相对于传统或现有的数据库分布式事务方案来说,我们所设计的软硬件协同的云原生分布式事务方案的核心优化点有:

(1)通过利用RDMA新型硬件低延迟的优势和LSN机制,优化了分布式事务Prepare阶段的执行流程,仅需执行远端RDMA读操作就可确定事务的Prepared状态,避免了Prepare阶段协调节点与参与节点之间的SQL交互开销。

(2)设计了CTS Log记录事务提交时间戳,协调节点CN通过RDMA将事务提交时间戳cts,以微秒级延迟写入参与节点PN的CTS Log,优化了Commit阶段的执行逻辑,使得Commit阶段可以异步执行。

4.多机并行DDL

PolarDB全局共用全量dd信息的同时将表进行拆分,不同RW节点负责读写不同分表,以提升单表的吞吐和数据承载能力。在实际业务中对表拆分后,如何控制所有分表的DDL流程,协调与逻辑表的关系,防止表的元信息不一致,是分布式DDL设计需要考虑的难题。

(1)DDL并发控制:在分布式表场景下,为了防止同一张表出现并发DDL,我们复用库/表锁的思想和管理逻辑,为全局库/表增加一个XB锁类型,执行DDL时首先拿XB锁,从而避免并发DDL。

(2)分布式DDL原子性保证:设计一种基于多阶段提交协议的机制,在Commit阶段之前的任何时间点,如果DDL执行过程发生异常,会立即报告给协调节点CN;CN向所有DN发送指令,回滚DN节点上执行的DDL操作,从而保证分布式DDL操作的原子性。

(三)高可用机制

为了实现数据库系统的高可用,传统OLTP数据库的做法是为每个主节点(Primary)维护一个或多个备节点(Standby)。为了降低成本且保证系统的高可用,我们提供了可供用户选择的多样化高可用方案。

首先,基于私有RO节点的高可用方案,用户可选择为每个RW节点配置私有RO节点,私有RO节点和RW共享同一份数据,无需额外存储数据。当一个RW节点发生故障时,可将其私有RO节点秒级切换为RW,接管流量请求,集群整体性能不会受到影响。另一方面,如果用户没有为RW节点配置私有RO,当RW节点发生故障时,我们还提供RW节点间互为备节点的机制来保证高可用。当一个RW节点发生故障时,可选择另外一个低负载的RW节点来快速接管故障节点上的流量,只需将故障节点上的库表重映射到低负载的RW即可,但由于资源限制在高压力负载下可能会影响集群整体性能。

(四)全局RO节点

为了支持跨表/库的全局查询/多表联合查询,我们设计了全局只读(RO)节点。考虑到集群中的每个RW节点都可以看到共享存储中的所有数据,因此将全局只读节点设计为多个RW节点的聚合库。全局只读节点可以直接查询所有RW节点写入的数据,避免了从多个RW节点查询数据并聚合它们。同时,不需要为全局RO节点存储额外的数据副本,节省了聚合库的额外存储开销。对于跨多个RW节点的全局查询,数据库集群提供透明路由,通过PolarProxy将全局查询自动路由到全局只读节点上。

(五)极致的性能和扩展性

使用TPC-C基准测试程序对PolarDB MySQL版Limitless超大规模集群(2340个读写节点,节点规格48核512GB)进行了性能测试,TPC-C被认为是数据库领域的“奥林匹克”,它是OLTP(联机交易处理系统)数据库性能测试唯一的国际权威榜单。

1.超大规模集群下稳定的性能

图3:摘自阿里云 PolarDB TPCC 报告

在8小时持续压测过程中,集群整体tpmC的波动率一直处于0.16%以内(标准要求2%以内),实现了8小时持续、无任何错误、稳定的压测,且集群整体tpmC高达20.55亿,刷新TPC-C世界纪录,登顶世界第一。

2.超大规模集群下高可用和容灾能力

图4:PolarDB TPCC 容灾场景性能数据

在容灾场景测试中,执行了不同组件的故障测试,真实的物理机器断电,验证了集群在物理机器故障的突发情况下,能在10 秒内完成故障容灾切换,2分钟内完成整体性能的恢复,容灾测试过程中对集群整体性能的影响控制在2%以内(标准要求10%以内),并且可以保证数据不丢失,分布式事务一致性等。

3.秒级水平扩容能力

图5:秒级水平扩容测试结果

在横向水平扩容测试时,创建的4个DB最开始都在RW1上,压测过程中,逐渐增加RW节点个数,并将DB2-DB4依次绑定到新增的RW节点。图中展示了扩容过程中集群整体的性能变化,表明集群可以实现秒级的水平扩容。

三、整体总结

PolarDB是第一个深度融合RDMA/CXL等新硬件的云原生关系型数据库,支持大规模高性能的横向跨机读写扩展,最高可扩展至数千个计算节点。该架构支持高性能的跨节点事务一致性,深度融合RDMA技术的云原生事务系统PolarTrans,弹性并行查询ePQ,其分布式能力实现性能近线性扩展。

此外,通过索引结构、I/O路径等90多种优化技术,集群中每个节点都实现了极致的单机性能。值得强调的是,PolarDB MySQL版多主集群(Limitless)成功刷新TPC-C世界纪录,表明PolarDB创新的可横向跨机读写扩展的多主多写云原生架构,不仅突破了单集群的扩展性瓶颈,还成功扛住了全球最大规模的并发交易峰值,在性能、可扩展性等多个维度均处于全球领跑者位置。

云原生数据库 PolarDB MySQL 版


PolarDB 100%兼容 MySQL,交易和分析性能最高分别是开源数据库的6倍和400倍,TCO 低于自建数据库50%。


点击阅读原文可以免费试用哦。

关于PolarDB如何保证数据一致性,除了RDMA和CTS Log,我认为还有以下几点值得关注:首先,全局事务ID分配机制至关重要,它需要保证在多主节点环境下,每个事务都能获得唯一的ID,从而避免冲突。其次,分布式锁的管理也是一个挑战,需要高效地协调多个节点对同一资源的访问。最后,故障恢复机制也需要考虑周全,确保在节点故障时,数据能够快速恢复到一致状态。这些技术协同工作,才能保证PolarDB在高并发写入时的可靠性。

一致性听起来好高大上,其实我觉得最简单理解就是“先来后到”。在多主架构下,如何确保事务的提交顺序与实际发生顺序一致?PolarDB可能通过时间戳或者全局序列号来解决这个问题。想象一下,如果两个节点同时修改同一行数据,只有时间戳更早的事务才能成功提交,这样就避免了数据冲突。当然,具体的实现可能更复杂,但核心思想就是保证事务的线性一致性。

个人觉得,这种趋势有点像“定制化”的概念。以前我们用的是通用硬件,数据库厂商只能在软件层面做文章。现在硬件厂商也开始关注数据库的需求,推出针对数据库优化的硬件。这种定制化可以带来更高的性能,但也会增加一定的成本和复杂性。未来的数据库可能会更加灵活,可以根据不同的硬件环境进行优化,从而达到最佳的性能和性价比。

以后会不会出现“数据库专用芯片”?就像现在的AI芯片一样。想想就刺激!

从工程角度看,这种设计让我想到了“中心化”的思想。虽然节省了存储成本,但也把压力集中到了共享存储上。如果遇到突发流量,共享存储可能会成为瓶颈。另外,如果RO节点需要进行复杂的聚合查询,由于数据分散在多个RW节点上,查询效率可能会受到影响。因此,我认为需要仔细评估业务场景,如果对查询性能和并发要求较高,或者需要频繁进行复杂查询,可能还是需要考虑为RO节点存储额外的数据副本。

谢邀,抛开文章不谈,保证分布式系统数据一致性的方法论其实有很多,我之前也调研过一些方案,抛砖引玉一下。除了文章中提到的,还可以考虑引入Paxos或者Raft这类分布式一致性算法。这些算法通过选举领导者、日志复制等机制,确保所有节点上的数据最终达到一致。当然,引入这些算法会增加一定的复杂性,需要在性能和一致性之间做出权衡。

我认为软硬件协同是数据库发展的必然趋势。单纯靠软件优化已经很难突破性能瓶颈,而新型硬件提供了更多的可能性。RDMA/CXL只是一个开始,未来可能会出现更多针对数据库优化的硬件。但这并不意味着数据库需要完全依赖特定硬件环境,而是应该在软件层面做好抽象和适配,使其能够充分利用硬件的优势,同时保持一定的通用性。关键在于找到软硬件之间的最佳结合点。

有没有老哥考虑过数据安全的问题?所有RO节点都可以访问共享存储中的所有数据,权限控制怎么做?万一RO节点被攻破,整个数据库就暴露了。细思极恐.jpg

这个设计确实很聪明,但任何方案都有trade-off。我认为最大的风险在于RO节点的性能瓶颈。如果所有查询都直接打到共享存储上,当查询量非常大时,可能会对存储系统的IO造成巨大压力,进而影响整个集群的性能。此外,如果共享存储本身出现故障,RO节点也会受到牵连,降低了系统的整体可用性。所以,这种方案可能更适合读多写少的场景,或者对数据实时性要求不高的场景。