简介: 通明分布式,是 PolarDB- X 行将公布的能力,它能让利用在应用 PolarDB- X 的过程中,犹如应用单机数据库个别的体验。与传统的中间件类型的“分布式数据库”相比,有了通明分布式能力的 PolarDB-X,不再须要利用思考分区键的概念,利用能够齐全将单机 MySQL 上开发的建表语句、利用代码间接迁徙到 PolarDB- X 上运行起来。本文将为大家介绍 PolarDB- X 通明分布式的新体验。
PolarDB-X 2.0 视频解读:https://yqh.aliyun.com/live/polardbx2021
通明分布式,是 PolarDB- X 行将公布的能力,它能让利用在应用 PolarDB- X 的过程中,犹如应用单机数据库个别的体验。
与传统的中间件类型的“分布式数据库”相比,有了通明分布式能力的 PolarDB-X,不再须要利用思考分区键的概念,利用能够齐全将单机 MySQL 上开发的建表语句、利用代码间接迁徙到 PolarDB- X 上运行起来。
本文将为大家介绍 PolarDB- X 通明分布式的新体验。
在 PolarDB- X 上装置一个 WordPress
WordPress 是一个开源的博客软件,它应用 MySQL 作为其数据库。操作是在 PolarDB- X 上装置一个 WordPress,来体验 PolarDB- X 的通明分布式能力。
咱们将遵循简略的三步走:
- 不批改 DDL 间接建表
- 不批改利用间接跑起来
- 做下压测,做下调优
总结如下:
- 应用官网的 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 的分布式事务有以下几个特色:
- 与 Spanner 一样,满足内部一致性这种最强的一致性级别
- 语法与 MySQL 齐全兼容,无需对利用进行革新
- 行为上反对兼容 MySQL 的 RC 与 RR 级别
PolarDB- X 分布式事务的原理咱们专栏有很多介绍的文章,在此不再赘述。对其原理感兴趣的同学能够参考这几篇文章:
https://zhuanlan.zhihu.com/p/329978215
https://zhuanlan.zhihu.com/p/338535541
https://zhuanlan.zhihu.com/p/355413022
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 中的回填,会依据以后的零碎负载,主动调节速度。
例如:
在这个例子中,分了四个阶段:
- 开始没有业务负载,DDL 回填速度回升到 25W 行 /s
- 业务负载开始回升,DDL 回填速度迅速降落到 13W 行 /s
- 业务 TPS 稳固在 1W5,DDL 回填速度稳固在 13W 行 /s
- DDL 完结后,业务 TPS 稳固在 1W6
从这个例子中,咱们能够看到 PolarDB-X DDL 的回填速度会主动依据业务负载进行调整,并且 DDL 期间,对业务的 TPS 影响很小。
让 Online 更 Online
为了进一步缩小 DDL 期间对业务的影响,PolarDB- X 还应用了多项技术,例如:
- 元数据多版本,详见:https://zhuanlan.zhihu.com/p/347885003
- 可暂停、可勾销
- MDL 死锁检测
咱们会在今后的文章里具体介绍这些技术的细节,请关注咱们的知乎专栏:https://www.zhihu.com/org/polardb-x
总结
PolarDB- X 的通明分布式能力,将极大的缩小利用从单机数据库迁徙分布式数据库的老本。同时,咱们将来也会让它变得更通明,咱们正在做的一些事件包含:
- 更精密的调度策略
- 热点数据的可视化展现,与 SQL 审计剖析联动的智能诊断
- 在有全局索引的状况下,反对分区级的 truncate
- 数据的按工夫滚动、清理
- 等等
版权申明: 本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。