PolarDB-X 2.1 新版本发布 让“MySQL 原生分布式”触手可及

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: PolarDB-X 2.1 是 PolarDB-X 非常重要的版本,也是第一次 PolarDB-X 分布式数据库的产品可以作为企业级的分布式数据库真正部署到客户的生产环境使用。


PolarDB-X 2.1 新版本发布

让“MySQL 原生分布式”触手可及


——黄贵(曲山)

阿里云数据首席架构师


了解更多PolarDB-X 内容:https://developer.aliyun.com/topic/polardbx_release


PolarDB-X 2.1 PolarDB-X 非常重要的版本,也是第一次 PolarDB-X 分布式数据库的产品可以作为企业级的分布式数据库真正部署到客户的生产环境使用。


一、一个好的MySQL分布式数据库应该是什么样的

image.png

  C++语言设计的概念 Zero Overhead Abstraction ——0负担抽象原则,它有两个重要特性:


  • 无须为不用的特性付出代价: C 类用户升级到 C++ 时,如果不使用 C++里的高级特性,则无须为这些特性付出额外的代价。比如在 C 里面是 structure,到 C++ 里可能是class 。对于 C 中的 structure C++class ,如果不带 virtual function ,则在内存布局的性能消耗上是等同的,不用付出额外的代价。
  • 你所使用的代码,不可能手写得更好:如果想要使用更高级的特性,用 C++ 扩展的能力,一定比手写的代码更好,即C++ 提供的语言特性能够很好地帮助到用户。


   C 语言的用户升级到 C++,必然是因为它带来了更新更强的能力,比如封装、抽象的能力,可以做继承、有多态。另外,C++ 提供了多种编程范式,比如面向对象、泛型编程、函数式编程等,这些特性都可以极大地拓展语言的抽象,带来能力的提升。


同理,从单机的 MySQL 数据库升级到分布式 MySQL 数据库,我们期望它能有哪些表现?

首先是完全兼容,可以由单机平滑过渡到分布式系统,无需对应用进行改造;第二,无需对数据库的结构进行改造;第三,不使用分布式能力则无须付出额外的开销。


单机到分布式最重要的变化是数据会分布在多个节点上,对于数据库中很多操作而言,尤其是事务,是需要付出一些额外代价的。如果事务涉及到多个数据的分区,而只是想将分布式系统作为单机数据库来用,同样也可以有单表的特性,无须付出分布式事务的代价。

升级到分布式系统后能够获得自动伸缩的能力,能够天然地利用分布式的特性实现跨地域的高可用,还可以处理混合的负载类型,包括事务的负载以及分析的负载,提供了高性价比的解决方案。


二、让分布式能力透明化

image.png


如何实现从单机到分布式完全透明化?


以从单机 MySQL 迁移到 PolarDB-X 2.1 版本为例:


   第一步:建表。使用单机 MySQL 上的建表语句、DDL语句在新的分布式数据库上建表,无须做任何修改。

第二步:让应用跑起来。应用代码也无须做任何修改,原有的 SQL 语法、原有的客户端驱动程序都可以直接使用,只需要更换新的数据库连接地址。

第三步:性能调优。可以使用很多工具做压测,包括一些可视化工具,能够提供对整个系统 SQL 性能的分析, DAS自动调优工具能够帮助找到热点SQL,还可以通过 DDL 建新的索引或对数据分区进行调整,对热点 SQL 进行调优。


实现以上整个过程的大部分操作只是诊断和适配,无须进行过多改造工作。

image.png

对于分布式系统而言,要做到透明,核心就是对分布式事务的支持。分布式数据库与单机数据库的关键差异在于,分布式数据库以一定的规则将数据做分片,然后分布在多个节点上,其中核心点在于如何在事务跨了多个数据分片时,保证它的 ACID 语义。这其中会涉及到如何做事务的 ACID 保证,如何做多版本处理并发的控制。有了事务 ACID 的保证,才能在此之上建立全局二级索引。


此外,很多其他功能比如备份恢复、时间回溯的查询以及分布式的备份等,都需要依赖分布式事务提供的全局一致性能力。数据的导入和导出也需要保证数据有全局快照的能力,在任何时间点都能读到一致的版本。


有了全局二级索引和多版本的并发控制等能力的支持,即可实现透明的分布式,无须显式地指定分区键,只需要像单机数库一样创建表,即能默认做数据的分区,也无须考虑数据分区带来的跨节点事务的处理。表的修改操作Online DDL 也不会对数据库的其他操作产生影响。

image.png

PolarDB-X 实现的是全局一致性的分布式事务

(使用 TSO全 timestamp)+ MVCC 多版本并发控制机制)实现的分布式数据库。主要的技术原理是基于 Paxos 做事务日志的同步来保证高可用。

在事务在处理的过程中,因为使用了两阶段提交的方式来做分布式事务的处理,如果发生了节点失效,也可以利用 Paxos 带来的高可用能力保证事务继续进行下去。

另外,使用了全局唯一的时间戳以及多版本并发控制的机制来保证它的隔离性,实现了 Snapshot Isolation 的隔离级别。


具体流程如下:GMS 组件提供全局事务的时间戳,在发起事务的过程中,如果事务要做提交,则会获取提交的时间戳并将其带到所有下面存储节点的参与者上。然后结合事务当前的状态,根据时间戳判断事务的可见性。每一条数据上都有其提交的时间戳,将其与当前事务的时间戳做比较,以决定这条数据在当前的事务中是否可见。


通过上述机制即可实现分布式事务的全局一致性和快照隔离。


本次 2.1 版本发布的最重要的功能就是自动模式数据库的功能。PolarDB-X  1.0 版本时代,是利用分库分表的模式来进行数据的自动分区。 2.0 的时代引入了全新的 AUTO 模式数据库,无需指定分区键。

 

image.png

上图展示了典型的电商交易场景,有交易记录表,其主键是事务 ID ,还有买家和卖家两个重要角色。对于交易的流水而言,通常除了按交易的流水日志 ID 查询以外,也有可能从买/卖家的维度查询。


表内可能有上亿条记录,需要将它创建为分区表。对于分布式数据库 PolarDB-X 而言,无需指定特定的分区键。因为这里的分区健,如果是按照buyer_id或者seller_id去查询,无法做分区裁剪。可以像使用单机数据库一样默认按主键 ID 做数据的分片。分片的算法默认是一致性哈希,也支持很多其他算法,包括 interval 做范围的划分、 range 的分区等,此类算法也可以通过 DDL 语句根据业务特点做调整,另外还可以通过多个查询维度建全局二级索引。


上图例子中建了两个全局二级索引,分别是买家 ID 卖家 ID 往表里面插入数据的时候,会针对数据根据数据的分区规则,将它均匀地分布在数据节点上。上图右侧两张索引表同样也按照分区规则做了均匀的分布。


image.png

数据自动负载均衡的功能,使得用户无需关心数据具体分布在哪个数据节点上,可由系统自动完成,主表以及两张索引表都按照一定的规则做数据的拆分,分片以后按照数据的大小和容量均匀分布到各个数据节点上。


有了自动负载均衡的能力以后,也就具备了在线扩缩容的能力,而在线扩缩容是单机到分布式平滑演进的重要基础。

image.png

上图有计算层的 CN 节点,也有存储层的 DN 节点。 CN 节点无状态节点,扩容和缩容非常轻量化,因为所有 CN 的能力都对等,将 SQL 发送到任意 CN 节点都可以实现同样的处理能力,得到相同的结果。出于性能的考虑,一般会将数据就近调度到临近的 CN 节点上。


因此,CN 的扩容非常方便,只需简单地将 CN 节点添加到集群上,同步到 GMS 节点里即可。


DN 是有状态的数据节点,扩缩容需要做数据的迁移。增加了一组数据节点后,调度任务管理器会根据当前数据的分布状况,将一部分数据迁移到新的数据节点上,以此保证所有节点的数据处在均衡的分布状态。

性能和容量方面,PolarDB-X 最大可以支持 1024 个节点,单节点最大存储 5TB 数据,能够满足大部分数据库的容量需求。


缩容同理,下线数据节点后,会将它缺失的副本补足,然后重新均匀分布到其他数据节点上。


从单机数据库迁移到分布式数据库,可以基于 Online DDL 的能力动态完成单机大表切换到数据分片的模式。比如原来在单机上非常大的表,希望通过分布式系统的数据分布能力对其进行拆分,可以通过一些 DDL 的能力动态地修改其分区模式,来完成单表到数据分布表的转换。

对于单机分布式而言,PolarDB-X 完全兼容了 MySQL 的语义及其行为,包括上下游对接的生态,比如全局 CDC 可以生成全局一致的 Binlog,可以将其作为单机 MySQL 的日志流来使用。不管是同步到下游大数据系统,还是作为 MySQL 的备份,都可以通过 CDC 来对接。

image.png

Online DDL 最大的特点就是在做 DDL 的过程中对当前数据库正在处理的业务 DML 语句没有任何影响,极大减轻了数据库运维人员的负担。数据库难免会遇到一些修改表结构、增加点索引等诉求,如果每次都要在业务的低峰期去进行,对运维会造成很大困扰,而且不够及时。有了 Online DDL的支持以后,可以在任意时间点做变更。这些变更包括了创建索引、加减列、变更分区算法。

值得一提的是,加列操作使用了 Instant DDL 机制,可以只修改元数据,无须对全部数据进行修改,操作性能极高,为毫秒级,对业务的影响可以缩减到最小。


此外,可以将数据库由单表变成分区表。在分区表上还可以修改分区数、表组以及分区算法等。同时也可以将它修改成广播表,在每个数据节点上都有同样的复制表,对于频繁做 join 的小表非常有用。这些能力也使得用户可以灵活调整数据表的数据分布方式,以满足不同业务负载的需求。


三、分布式是一种全新数据库的模式

分布式是一种全新的数据库模式,它不仅是对单机数据库的完全兼容,更大的作用是带来了更多更强的能力。PolarDB-X 2.1版本带来了以下卓越的能力:


1. 高可用容灾能力

image.png

2.1 版本正式引入了 X-Paxos 使用 Paxos 一致性协议保证数据的可靠性以及系统节点失效时的可用性。


它实现了 99.99% 可用性:任意节点的故障都不会影响集群的可用,数据 0 丢失。

提供了多种部署形态:


同城三机房,默认 2.5 副本。在 Paxos 协议框架下有几种角色,包括 leader节点(数据事务的主节点),它带有两个副本,分别是 follower 节点和 logger 节点。logger 节点为了节省成本,不存储全量数据,只存储日志来保证数据的一致性,同时也减少了数据副本的存储;另外还有 learner 节点,可以做只读的副本。


两地的三中心,默认五副本。

   拥有分布式特性:用 Paxos 协议做一致性同步时,需要传输日志,而在网络上保证大量的日志传输的一致性较为困难。2.1版本支持日志分片的拆分,也做了行级热点的写入,支持自动合并,为很多电商的秒杀业务场景提供了保障;另外,通过对 follower 节点开放读,在 follower 节点上可以将全局 TSO 带过去,做一致性版本的读,利用 follower 节点的处理能力来提升整个系统的吞吐。

image.png

高可用的架构帮助我们提供了一个很好的基础。使得PolarDB-X 在容灾方面也提供了强有力的支撑,比如两地三中心的部署方式。采用5 副本(2+2+1)的机制,设置了很多规则,比如存储副本leader 节点失效重新选主的时候,会优先选择同机房的主节点,对整个系统服务的可靠性和延时不会带来太大的影响;另外,机房失效时,可以做五副本到三副本的降级操作,保证强一致性、持续的处理能力。


主可用区的概念是为了保证在同机范围内做网络访问时,最大可能地减小延时。


2. 冷热分离存储

image.png

冷热分离存储是基于分布式数据库做的成本上的优化。利用 TTL 机制,在创建表的时候指定其过期时间,将已经过期的数据归为冷数据,做归档的存储。归档存储于 OSS 里,相对于本地的在线存储,极大降低了成本。与此同时, OSS 上的存储格式进行了高度压缩,进一步降低了成本。


归档到 OSS 采用了开放的格式,优点在于可以对接很多开源生态,比如Spark、Flink 的生态,然后做分析、查询。同时,其自身的查询引擎也支持快速查询在 OSS 归档的数据。


3.可观测性

image.png

PolarDB-X 的 Dashboard 集成了开源的 Prometheus 等工具做监控、告警,分析当前系统的运行状态。另外还建了一套做 performance insight 工具,分析数据在各个节点上的分布状况以及他们在分区上的访问频率,帮助用户更好地发现系统的性能瓶颈,并进行调优。


四、未来往何处去


未来我们会持续在 PolarDB-X 开源版本上做更多投入。

image.png

我们会将开源的 codebase 与当前的商业版本对齐,所有能力在内核层面完全开源。也会继续做更多企业级能力的增强,使 PolarDB-X 完全变为企业级的分布式数据库。


全新的 HTAP 引擎使得 PolarDB-X 同时能够处理事务型和分析型的负载。另外还会做国产化适配调优,实现国产化替代的工作,包括深度诊断、自动化调优工具以及各种生态的对接等。


相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
相关文章
|
4月前
|
存储 关系型数据库 分布式数据库
PolarDB 并行查询问题之分布式查询执行过程中的数据分发如何解决
PolarDB 并行查询问题之分布式查询执行过程中的数据分发如何解决
53 1
|
15天前
|
Cloud Native 关系型数据库 分布式数据库
PolarDB 分布式版 V2.0,安全可靠的集中分布式一体化数据库管理软件
阿里云PolarDB数据库管理软件(分布式版)V2.0 ,安全可靠的集中分布式一体化数据库管理软件。
|
4月前
|
存储 缓存 负载均衡
【PolarDB-X 技术揭秘】Lizard B+tree:揭秘分布式数据库索引优化的终极奥秘!
【8月更文挑战第25天】PolarDB-X是阿里云的一款分布式数据库产品,其核心组件Lizard B+tree针对分布式环境优化,解决了传统B+tree面临的数据分片与跨节点查询等问题。Lizard B+tree通过一致性哈希实现数据分片,确保分布式一致性;智能分区实现了负载均衡;高效的搜索算法与缓存机制降低了查询延迟;副本机制确保了系统的高可用性。此外,PolarDB-X通过自适应分支因子、缓存优化、异步写入、数据压缩和智能分片等策略进一步提升了Lizard B+tree的性能,使其能够在分布式环境下提供高性能的索引服务。这些优化不仅提高了查询速度,还确保了系统的稳定性和可靠性。
100 5
|
4月前
|
关系型数据库 MySQL 分布式数据库
PolarDB 并行查询问题之保证与MySQL的兼容性如何解决
PolarDB 并行查询问题之保证与MySQL的兼容性如何解决
49 1
|
4月前
|
缓存 NoSQL 关系型数据库
(八)漫谈分布式之缓存篇:唠唠老生常谈的MySQL与Redis数据一致性问题!
本文来聊一个跟实际工作挂钩的老生常谈的问题:分布式系统中的缓存一致性。
169 11
|
4月前
|
存储 SQL 运维
“震撼发布!PolarDB-X:云原生分布式数据库巨擘,超高并发、海量存储、复杂查询,一网打尽!错过等哭!”
【8月更文挑战第7天】PolarDB-X 是面向超高并发、海量存储和复杂查询场景设计的云原生分布式数据库系统
116 1
|
4月前
|
C# UED 定位技术
WPF控件大全:初学者必读,掌握控件使用技巧,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用程序开发中,控件是实现用户界面交互的关键元素。WPF提供了丰富的控件库,包括基础控件(如`Button`、`TextBox`)、布局控件(如`StackPanel`、`Grid`)、数据绑定控件(如`ListBox`、`DataGrid`)等。本文将介绍这些控件的基本分类及使用技巧,并通过示例代码展示如何在项目中应用。合理选择控件并利用布局控件和数据绑定功能,可以提升用户体验和程序性能。
84 0
|
4月前
|
Cloud Native 关系型数据库 分布式数据库
什么是云原生数据库PolarDB分布式版
本文介绍什么是云原生数据库PolarDB分布式版,也称为PolarDB分布式版,本手册中简称为PolarDB-X。
104 0
|
5月前
|
存储 关系型数据库 MySQL
深度评测:PolarDB-X 开源分布式数据库的优势与实践
本文对阿里云开源分布式数据库 PolarDB-X 进行了详细评测。PolarDB-X 以其高性能、强可用性和出色的扩展能力在云原生数据库市场中脱颖而出。文章首先介绍了 PolarDB-X 的核心产品优势,包括金融级高可靠性、海量数据处理能力和高效的混合负载处理能力。随后,分析了其分布式架构设计,包括计算节点、存储节点、元数据服务和日志节点的功能分工。评测还涵盖了在 Windows 平台通过 WSL 环境部署 PolarDB-X 的过程,强调了环境准备和工具安装的关键步骤。使用体验方面,PolarDB-X 在处理分布式事务和实时分析时表现稳定,但在网络问题和性能瓶颈上仍需优化。最后,提出了改进建
7067 2
|
2天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
10 3