PolarDB-X 1.0-技术白皮书-技术原理

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 扩展性原理扩展性本质在于分而治之,PolarDB-X计算资源通过水平拆分(分库分表)和垂直拆分,将数据分散到多个存储资源MySQL以实现获取数据读写并发和存储容量分散的效果。水平拆分(分库分表)PolarDB-X具备数据水平拆分的能力,将数据库数据按某种规则分散存储到多个稳定的MySQL数据库上。这些MySQL数据库可分布于多台机器乃至跨机房,对外服务(增删改查)尽可能保证如同单MySQL数据库体验。拆分后,在MySQL上物理存在的数据库称为分库,物理的表称为分表(每个分表数据是完整数据的一部分)。PolarDB-X通过在不同MySQL实例上挪动分库,实现数据库扩容,提升PolarDB

数据拆分原理如下图所示:p282502.png计算扩展性

无论是水平拆分还是垂直拆分,PolarDB-X常常碰到需要对远超单机容量数据进行复杂计算的需求,例如需要执行多表JOIN、多层嵌套子查询、Grouping、Sorting、Aggregation等组合的SQL操作语句。

针对这类在线数据库上复杂SQL的处理, PolarDB-X额外扩展了单机并行处理器(Symmetric Multi-Processingy,简称SMP)和多机并行处理器(DAG)。前者完全集成在PolarDB-X内核中;而对于后者,PolarDB-X构建了一个计算集群,能够在运行时动态获取执行计划并进行分布式计算,通过增加节点提升计算能力。

平滑扩容

PolarDB-X扩容通过增加RDS/MySQL实例数,将原有的分库迁移到新的RDS/MySQL实例上,达到扩容的目标。PolarDB-X采用基于存储计算分离的Shared-Nothing架构,最大限度地发挥了云数据库的弹性扩展能力。

PolarDB-X的架构图如下:p282502.png如上图所示,PolarDB-X整个架构核心可分为3个部分: GMS(Global Meta Service):负责管理分布式下库、表、列、分区等的元数据,以及提供TSO服务; CN(Compute Node):负责提供分布式的SQL引擎与强一致事务引擎; DN(Data Node):提供数据存储服务,负责存储数据与副本数据的强一致复制。

PolarDB-X存储层使用的是X-DB。因此,每一个DN节点就是一个X-DB实例(X-DB的介绍请看这里)。X-DB是在MySQL的基础之上基于X-Paxos打造的具备跨可用区跨地域容灾的高可用数据库,使用InnoDB存储引擎并完全兼容MySQL语法,它能提供Schema级别的多点写与Paxos Group的Leader调度的能力。PolarDB-X的分区副本的高可用与故障容灾就是建立在X-DB基础上的。

PolarDB-X扩容原理步骤如下:

  1. 创建扩容计划选择新增加RDS/MySQL,并选定需要迁移到新RDS/MySQL实例上的分库,提交任务后系统自动在目标RDS/MySQL上创建数据库和账号,并提交任务进行数据迁移同步。
  2. 全量迁移系统选择当前时间之前的一个时间点,将这个时间点之前的数据进行全量的数据复制迁移。
  3. 增量数据同步完成全量迁移后,基于全量迁移开始之前时间点的增量变更日志进行增量同步,最终原分库和目标分库数据实时同步。
  4. 数据校验增量达到准实时同步后,系统自动做全数据校验,并且订正因为同步延迟造成的不一致数据。
  5. 应用停写和路由切换校验完成后,并且增量依然维持准实时同步,业务选定时间进行切换,为确保数据严格一致,建议应用停服(也可以不停,但可能面临同一条数据高并发写入覆盖问题),引擎层进行分库规则的路由切换,将后续流量转向新库,切换过程秒级完成。

扩容示意图下:p282502.png为了保证数据本身的安全,便于扩容回滚,在路由规则切换完成后,数据同步依然会运行,直到数据运维人员确认服务正常后在控制台主动发起旧分库数据的清理。

整个扩容过程对上层的业务正常服务几乎没有影响(如果RDS/MySQL实例规格过小或者压力过大则可能造成部分影响),切换时如果应用不停服,建议操作选择在数据库访问低谷期进行,降低同一条数据并发更新覆盖的概率。

读写分离

PolarDB-X的读写分离功能是基于RDS/MySQL只读实例所做的一种相对透明读流量切换策略。当PolarDB-X存储资源MySQL主实例的读请求较多、读压力比较大时,您可以通过读写分离功能对读流量进行分流,减轻存储层的读压力。

业务应用在能够忍受只读实例相对于主实例数据同步延迟的前提下,不需要修改代码,即可在PolarDB-X控制台中增加RDS/MySQL只读实例和调整读权重,将读流量按照需要的比例在RDS/MySQL主实例与多个RDS/MySQL只读实例之间调整,写操作和事务操作则统一走RDS/MySQL主实例。需要注意的是,主RDS/MySQL实例和只读RDS/MySQL存在数据同步延迟,并且在发生大的DDL或者数据订正时,有可能导致分钟级别以上的延迟,所以需要业务忍受该情况所带来的影响。添加只读实例可以使读性能线性提升。例如在初始有一个只读实例的情况下,挂载一个只读实例,读性能提升至原来两倍,挂载2个只读实例,则读性能为单个主库读性能的三倍。

读写分离流量分配与扩展

PolarDB-X读写分离功能采用了对应用透明的设计。在不修改应用程序任何代码的情况下,只需在控制台中调整读权重,即可实现将读流量按自定义的权重比例在存储资源MySQL/RDS主实例与多个存储资源只读实例之间进行分流,而写流量则不做分流全部到指向主实例。

添加只读实例可以使读性能线性提升。例如在初始有一个只读实例的情况下,挂载一个只读实例,读性能提升至原来2倍,挂载2个只读实例为单个主库的3倍。设置读写分离后,从存储资源MySQL主实例读取属于强读(即实时强一致读);而只读实例上的数据是从主实例上异步复制而来存在毫秒级的延迟,因此从只读实例读取属于弱读(即非强一致性读)。您可以通过Hint指定那些需要保证实时性和强一致性的读SQL到主实例上执行。示意图如下:p282502.png

读写分离对事务的支持

读写分离仅对显式事务(即需要显式提交或回滚的事务)以外的读请求(即查询请求)有效,写请求和显式事务中的读请求(包括只读事务)均在主实例中执行,不会被分流到只读实例。

常见的读、写请求SQL语句包括:

  • 读请求:SELECT、SHOW、EXPLAIN、DESCRIBE。
  • 写请求:INSERT、REPLACE、UPDATE、DELETE、CALL。

非拆分模式的读写分离

PolarDB-X的读写分离可以在非拆分模式下独立使用。

PolarDB-X控制台上创建PolarDB-X数据库时,在选定一个数据库实例的情况下,可以选择将底层数据库实例下的一个逻辑数据库直接引入PolarDB-X做读写分离,不需要做数据迁移。

分布式事务

分布式事务通常使用二阶段提交来保证事务的原子性(Atomicity)和一致性(Consistency)。

二阶段事务会将事务分为以下两个阶段:

  • 准备(PREPARE)阶段:在PREPARE阶段,数据节点会准备好所有事务提交所需的资源(例如加锁、写日志等)。
  • 提交(COMMIT)阶段:在COMMIT阶段,各个数据节点才会真正提交事务。

当提交一个分布式事务时,PolarDB-X服务器会作为事务管理器的角色,等待所有数据节点(MySQL服务器)PREPARE成功,之后再向各个数据节点发送COMMIT请求。

p282502.png

全局二级索引

全局二级索引(Global Secondary Index,GSI)支持按需增加拆分维度,提供全局唯一约束。每个GSI对应一张索引表,使用XA多写保证主表和索引表之间数据强一致。

p282502.png

全局二级索引支持如下功能:

  • 增加拆分维度。
  • 支持全局唯一索引。
  • XA多写,保证主表与索引表数据强一致。
  • 支持覆盖列,减少回表操作,避免额外开销。
  • Online Schema Change,添加GSI不锁主表。
  • 支持通过HINT指定索引,自动判断是否需要回表。
相关实践学习
跟我学:如何一键安装部署 PolarDB-X
《PolarDB-X 动手实践》系列第一期,体验如何一键安装部署 PolarDB-X。
相关文章
|
SQL 存储 Cloud Native
PolarDB-X 2.0 核心技术能力解读
希望通过本系列课程,让大家更深入了解PolarDB-X 2.0 核心技术能力,加深对PolarDB-X的理解与认识,最终可以实践到大家的工作当中。
655 0
PolarDB-X 2.0 核心技术能力解读
|
3天前
|
关系型数据库 Serverless 分布式数据库
PolarDB PostgreSQL版Serverless技术原理解读
数据库是现代企业IT系统中非常重要的一部分。在创建数据库时,客户往往需要比较保守地去配置数据库集群的资源,包括CPU、内存、存储以及连接数等多种参数配置,以确保业务能够在波峰和波谷都能平稳运行。在这种情况下,客户购买的集群资源在业务波谷时期会被闲置,导致整体成本偏高;而在业务压力增长阶段,集群资源又应对不足。Serverless数据库可以很好地解决这个问题。它能够让数据库集群资源随客户业务负载动态弹性扩缩,将客户从复杂的业务资源评估和运维工作中解放出来。 本文描述PolarDB PostgreSQL版Serverless的构建中, 如何实现弹得快、弹得准、弹得稳、弹得广的几个关键技术点。
51 0
PolarDB PostgreSQL版Serverless技术原理解读
|
SQL 存储 容灾
十年磨一剑,云原生分布式数据库PolarDB-X的核心技术演化
以MySQL为存储构建分布式数据库这条路上走了10余年,这中间积累了大量的技术,也走了一些弯路,未来我们也会坚定的走下去。
572 0
十年磨一剑,云原生分布式数据库PolarDB-X的核心技术演化
|
存储 运维 Cloud Native
PolarDB-X 1.0-技术白皮书-技术架构
架构演进理念 当前,分布式领域有3大技术方向:Sharding技术,NewSQL原生分布式技术,云原生DB技术。每种分布式都有其独特的优势和特点。PolarDB-X的架构继承了DRDS和X-DB技术的稳定性,结合了PolarDB的云原生技术,融入了NewSQL对于分布式数据一致性的能力,为用户提供新的“云原生+分布式”的产品体验。
241 0
PolarDB-X 1.0-技术白皮书-技术架构
|
数据采集 容灾 网络协议
PolarDB-X 1.0-技术白皮书-解决方案与客户案例
异地多活场景下的数据库方案 方案背景 随着云计算的蓬勃发展,越来越多信息系统选择部署在云计算环境下,因此基于云产品为信息系统的服务能力和数据质量提供保障尤为重要。为了防止灾难性的故障如火灾、洪水、地震、区域电力中断或者人为破坏等对信息系统造成不可挽回的破坏,需要构建容灾系统来保障信息系统的可用性和安全性。 2007年,国务院信息化办公室联合银行、电力、民航、铁路、证券等八大重点行业,制定发布了国家标准GB/T20988-2007《信息系统灾难恢复规范》,明确规定了容灾能力的6个等级要求。企业在构建容灾系统时往往会参考国标等级,或者以此作为合规要求。然而,大部分传统容灾方案如同城容灾、同城双活
257 0
PolarDB-X 1.0-技术白皮书-解决方案与客户案例
|
弹性计算 关系型数据库 MySQL
PolarDB-X 1.0-性能白皮书-PolarDB-X TPC-C测试说明
本文介绍如何使用TPC-C工具测试PolarDB-X数据库的联机交易处理(偏向OLTP能力),您可以按照本文介绍自行测试对比,快速了解数据库系统的性能。
1607 0
PolarDB-X 1.0-性能白皮书-PolarDB-X TPC-C测试说明
|
SQL 弹性计算 关系型数据库
PolarDB-X 1.0-性能白皮书-TPC-H测试说明
本文详细介绍了PolarDB-X的TPC-H测试设计、测试过程和测试结果。
1197 0
PolarDB-X 1.0-性能白皮书-TPC-H测试说明
|
弹性计算 Oracle 关系型数据库
PolarDB-X 1.0-性能白皮书-PolarDB-X Sysbench测试说明
Sysbench 说明 Sysbench是一款开源的、模块化的、跨平台的多线程性能测试工具,可以执行数据库、CPU、内存、线程、IO等方面的性能测试。目前支持的数据库有MySQL、Oracle和PostgreSQL。以下验证PolarDB-X在Sysbench OLTP和SELECT场景中的性能表现。
577 0
PolarDB-X 1.0-性能白皮书-PolarDB-X Sysbench测试说明
|
SQL 弹性计算 关系型数据库
PolarDB-X 1.0-性能白皮书-Sysbench 使用指南
PolarDB-X 性能测试使用 Sysbench 作为压测工具,本文介绍 Sysbench 的使用方法。
387 0
|
14天前
|
SQL 运维 关系型数据库
PolarDB产品使用合集之PolarDB 2.3.0 版本的 CDC 功能支持 Polardb-X 到 Polardb-X 的数据同步吗
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。

热门文章

最新文章

相关产品

  • 云原生分布式数据库 PolarDB-X