简介: 通明分布式,是PolarDB-X行将公布的能力,它能让利用在应用PolarDB-X的过程中,犹如应用单机数据库个别的体验。与传统的中间件类型的“分布式数据库”相比,有了通明分布式能力的PolarDB-X,不再须要利用思考分区键的概念,利用能够齐全将单机MySQL上开发的建表语句、利用代码间接迁徙到PolarDB-X上运行起来。本文将为大家介绍PolarDB-X通明分布式的新体验。

通明分布式,是PolarDB-X行将公布的能力,它能让利用在应用PolarDB-X的过程中,犹如应用单机数据库个别的体验。

与传统的中间件类型的“分布式数据库”相比,有了通明分布式能力的PolarDB-X,不再须要利用思考分区键的概念,利用能够齐全将单机MySQL上开发的建表语句、利用代码间接迁徙到PolarDB-X上运行起来。

本文将为大家介绍PolarDB-X通明分布式的新体验。

在PolarDB-X上装置一个WordPress

WordPress是一个开源的博客软件,它应用MySQL作为其数据库。操作是在PolarDB-X上装置一个WordPress,来体验PolarDB-X的通明分布式能力。

咱们将遵循简略的三步走:

  1. 不批改DDL间接建表
  2. 不批改利用间接跑起来
  3. 做下压测,做下调优

总结如下:

  • 应用官网的WordPress镜像,不做任何批改,其安装程序就能主动的在PolarDB-X上实现建表、数据初始化等工作,其应用的都是规范的MySQL语法。
  • 对此WordPress进行压测,PolarDB-X的各项监控数据显示,各节点处于的负载、数据量均处于平衡的状态。
  • 通过PolarDB-X提供的SQL剖析、DAS等工具,能够不便的找到零碎中热点SQL。
  • DBA能够间接通过创立索引、批改数据分布等DDL语句对系统性能做进一步的优化,不须要批改利用。

PolarDB-X实现通明分布式的武器

上面为大家分享下,PolarDB-X是如何实现通明分布式的。

通明数据分区

PolarDB-X是一个典型的Share Nothing的分布式数据库,其简化架构如下:

其外围组件为无状态的计算节点CN,与有状态的存储节点DN。

要理解PolarDB-X的通明分布式能力,首先要理解数据在PolarDB-X上是如何散布的。

在PolarDB-X中,一个表由多个索引组成,包含主键、二级索引等。PolarDB-X会对每个索引进行独立的进行分区,其分区键为索引的key。

例如一个典型的电商场景,订单表,领有一个主键(id),两个索引(seller_id与buyer_id):

create table orders (   id bigint,    buyer_id varchar comment '买家',    seller_id varchar comment '卖家',   primary key(id),   index sdx(seller_id),   index bdx(buyer_id))
  • 对于主键索引,会依照id对其进行分区
  • 对于索引sdx,会依照seller_id进行分区
  • 对于索引bdx,会依照buyer_id进行分区

如下图所示:

对索引进行分片之后,PolarDB-X会将这些分片打散到不同的存储节点里,并会依照数据量等信息进行负载平衡,如下图所示:

在PolarDB-X中,建表语句中能够不思考分区键,PolarDB-X也能主动的对表进行分片与负载平衡。

因而,利用迁徙PolarDB-X时,能够将单机MySQL中的建表语句导出,不须要批改间接在PolarDB-X中执行即可。

通明的分布式事务

分布式事务是PolarDB-X中的最重要的根底能力,它宽泛的利用于业务内,防止了业务对事务代码进行革新;同时,PolarDB-X外部也用事务来实现索引。

PolarDB-X的分布式事务有以下几个特色:

  1. 与Spanner一样,满足内部一致性这种最强的一致性级别
  2. 语法与MySQL齐全兼容,无需对利用进行革新
  3. 行为上反对兼容MySQL的RC与RR级别

Online DDL

PolarDB-X反对类型丰盛的Online DDL,这里介绍一些有代表性的DDL类型。

索引保护

与单机MySQL的索引有所差别,PolarDB-X的索引均为全局索引,蕴含以下几种类型:

  • 一般索引
  • 惟一索引
  • 聚簇索引

其中聚簇索引是PolarDB-X绝对于MySQL的一种新类型的索引,它会蕴含表中的所有列,从而防止了回表的代价。

PolarDB-X中对索引的创立都通过DDL来实现,并且都是Online的,不会阻塞业务。

例如:

创立一个一般的索引:CREATE INDEX idx1 ON t1(name)
创立一个聚簇的索引:CREATE CLUSTERED INDEX idx1 ON t1(name)

INSTANT ADD COLUMN

加列操作是业务中最为常见的DDL类型。在MySQL中,加列操作的耗时是与数据量相干的(MySQL8.0中在表的最初面加列是INSTANT的)。

在PolarDB-X中,在任意地位加列都是INSTANT的,这个代表加列操作为恒定的秒级耗时,与数据量无关,不会对业务产生任何影响。

分区调整

PolarDB-X反对4种表的散布策略,Hash、Range、List、Broadcast。因为Hash能防止间断写入的热点,PolarDB-X默认应用Hash策略,大多数状况下,此策略可能很好的满足零碎的性能须要。

然而如果业务在运行期间,心愿抉择适合的分区策略来晋升零碎性能,在PolarDB-X中能够不便的通过DDL语句进行调整,PolarDB-X会依照新的分区策略从新组织表的数据。

例如:

  • 批改表的分区策略为Hash:ALTER TABLE t1 PARTITION BY HASH(name)
  • 批改表的分片数为32:ALTER TABLE t1 PARTITION BY HASH(name) PARTITIONS 32
  • 将表变为播送表:ALTER TABLE t1 BROADCAST
  • 批改表的分区策略为RANGE:ALTER TABLE t1 PARTITION BY RANGE(id)

任意两种分区策略之间都能够通过DDL语句进行转换:

回填速度自适应

想必很多同学有过这样的教训:一个超大的表进行DDL操作,因为数据量比拟大,这个DDL操作无奈在一天内实现,为了防止对业务影响,人肉在白天业务高峰期降临的时候,调整参数,升高DDL的回填速度,早晨在业务高峰期完结后,进步DDL的回填速度。

PolarDB-X中的回填,会依据以后的零碎负载,主动调节速度。

例如:

在这个例子中,分了四个阶段:

  1. 开始没有业务负载,DDL回填速度回升到25W行/s
  2. 业务负载开始回升,DDL回填速度迅速降落到13W行/s
  3. 业务TPS稳固在1W5,DDL回填速度稳固在13W行/s
  4. DDL完结后,业务TPS稳固在1W6

从这个例子中,咱们能够看到PolarDB-X DDL的回填速度会主动依据业务负载进行调整,并且DDL期间,对业务的TPS影响很小。

让Online更Online

为了进一步缩小DDL期间对业务的影响,PolarDB-X还应用了多项技术,例如:

  • 元数据多版本,详见:https://zhuanlan.zhihu.com/p/...
  • 可暂停、可勾销
  • MDL死锁检测

咱们会在今后的文章里具体介绍这些技术的细节。

总结

PolarDB-X的通明分布式能力,将极大的缩小利用从单机数据库迁徙分布式数据库的老本。同时,咱们将来也会让它变得更通明,咱们正在做的一些事件包含:

  • 更精密的调度策略
  • 热点数据的可视化展现,与SQL审计剖析联动的智能诊断
  • 在有全局索引的状况下,反对分区级的truncate
  • 数据的按工夫滚动、清理
  • 等等

原文链接
本文为阿里云原创内容,未经容许不得转载。