本文介绍PolarDB-X透明分布式的概念、工作模式。

背景

传统单机MySQL数据库的应用,在遇到一些资源瓶颈或性能瓶颈,并且无法满足业务要求时,考虑将单机数据库升级为分布式数据库并突破资源瓶颈,是一个行之有效的解决方案。

但是,传统单机数据库的用户使用接分布式数据库时,普遍会遇到一些共性的问题,比如:

  • 应用的数据在分布式数据库应该如何分布?

  • 哪些表需要进行水平切分?分区方案及分区列如何选择?分区数目如何确定?

  • 哪些表会落在哪些数据节点?资源不均衡如何处理?

要解决好上述的这些问题,往往要求用户对分布式数据库的原理及其适用场景都有一定的背景知识。所以,用户要使用好分布式数据库,是有一定的门槛要求的。

为了降低用户使用分布式数据库的门槛,方便用户更好地从传统单机数据库切换到分布式数据库,PolarDB-X 2.0 向用户提供了透明分布式的内核能力。

什么是透明分布式

PolarDB-X 2.0的透明分布式的本质,是通过向用户提供默认分区策略或数据分布策略,让用户的应用在近乎零改造的前提下接入分布式数据库,并同时能享受到因分布式数据库扩展性所带来的突破单机性能瓶颈的红利。

因此,透明分布式最核心的能力就是帮助用户决定一张表采用何种分区方案,以及该表的数据将如何分布在 PolarDB-X的各个DN节点上。

对于从传统单机MySQL数据库切换到PolarDB-X分布式数据库的用户,其业务的建表 SQL 可以分为两大类:

  • 第一类表:建表SQL没有显式使用MySQL分区表语法,因此可称为 MySQL 单表;

  • 第二类表:建表 SQL 显式使用了MySQL分区表语法,比如,带上了Partition By Hashs(id) 等,因此可称为 MySQL 分区表。

对于第二类表,由于用户的建表语句已经选择使用了MySQL的分区语法,所以可认为用户已经为该表选取最合适业务的分区方案。因此,这类表在PolarDB-X内部也将作为手动分区表,它的各个分区默认自动均衡分布到不同的DN节点,从而实现负载均衡。

对于第一类表,由于用户的建表语句并没有使用MySQL的分区语法,并且这类表通常占大多数。因此,透明分布式重点就是要帮助用户决定这类表在PolarDB-X里的分区方案及数据分布方案。

PolarDB-X透明分布式针对第一类表的建表,主要提供了三种分区方案与数据分布方案:

  • 第一种方案:纯单表,即原来业务所有的MySQL单表在PolarDB-X中保持单表并分配固定的 DN节点,而不是自动打散,这相当于与原来用户的单机MySQL的用法保持完全相同;

  • 第二种方案:单表打散,即原来业务所有的MySQL单表在PolarDB-X中保持单表,并且自动打散到不同的DN节点;

  • 第三种方案:自动分区,即原来业务所有的MySQL单表在PolarDB-X中实施自动分区:

    • 主表以按主键进行水平的哈希分区;

    • 索引默认使用全局索引,并按索引列水平分区。

因此,根据一个逻辑库对于所有业务的MySQL单表的建表SQL默认所采用的是纯单表方案、单表打散方案还自动分区方案,我们可以将透明分布式的功能划分为以下三种工作模式:

  • 单表打散

  • 自动分区

  • 手动分区

透明分布式的工作模式

由于需要对接分布式数据库的应用场景是多种多样的,因此,目前PolarDB-X 2.0透明分布式有多种不同的工作模式,每种工作模式使用不同的默认分区策略或数据分布策略,这样用户就能根据自己的业务及应用的特点,在对接分布式数据库时(尤其是首次对接分布式数据库的用户),选择最合适自己应用的工作模式。

PolarDB-X 2.0 透明分布式工作模式及其优缺点,如下表所示:

工作模式

行为简述

优缺点

单表打散

同一个逻辑库内的所有表:

  • 若逻辑表没显式指定MySQL的分区定义,将作为单表,并被随机分配到PolarDB-X的不同DN节点,实现负载均衡。

  • 若逻辑表显式指定MySQL的分区定义,将作为分区表,各个分区均衡分布到不同的DN节点。

优点:

  • 业务零改造,使用门槛低。

  • SQL兼容性最好。

  • SQL查询性能最大限度地保持与原来相近。

不足:

  • 各 DN易因不同的表访问频次差异及扫描行数而出现负载不均衡。

自动分区

同一个逻辑库内的所有表,若它们没显式指定 MySQL的分区定义,它们将:

  • 自动使用表的主键进行水平分区。

  • 所有索引自动使用全局索引,并按索引列进行水平分区。

优点:

  • 业务近乎零改造,使用门槛低。

  • 具备水平扩展性。

不足:

  • 需要维护多个全局索引,写入吞吐会下降。

  • 各DN易因不同全局索引的热点而出现负载不均衡,扩展性受限。

手动分区

同一个逻辑库内的所有表:

  • 若逻辑表没显式指定MySQL的分区定义,将作为单表,并被分配到同一个DN。

  • 若逻辑表显式指定MySQL的分区定义,将作为分区表,各个分区均衡分布到不同的DN 节点。

优点:

  • 分区方案最符合业务场景。

  • 性能最好,负载最均衡,线性扩展性最好。

不足:

  • 手动分区方案,要求对分布式数据库原理有所了解,有一定的使用门槛及学习成本。

  • 业务可能有一定改造成本。

说明

透明分布式的上述三种工作模式,并不是不相容的互斥关系,而是可以相互地配合使用。例如,手动分区分别可以与单表打散或自动分区配合使用,共同帮助用户解决问题。

在实际应用中,关于上述三种透明分布式的工作模式分别在什么场景下使用最为合适,可以参考最佳实践