Help文档:
https://help.aliyun.com/document_detail/50067.html?spm=5176.7947010.779804.ee.2cb734f4QtWXqx
二、技术架构
1、产品概述
分布式关系型数据库服务(Distributed Relational Database Service,简称 DRDS)专注于解决单机关系型数据库扩展性问题,具备轻量(无状态)、灵活、稳定、高效等特性,是阿里巴巴集团自主研发的中间件产品。DRDS 兼容 MySQL 协议和语法,支持分库分表、平滑扩容、服务升降配、透明读写分离和分布式事务等特性,具备分布式数据库全生命周期的运维管控能力。
DRDS 主要应用场景在大规模在线数据操作上,通过贴合业务的拆分方式,将操作效率提升到极致,有效满足用户在线业务对关系性数据库要求。
DRDS 主要解决了以下问题:
单机数据库容量瓶颈: 随着数据量和访问量的增长,单机数据库会遇到很大的挑战,依赖硬件升级并不能完全解决问题。
单机数据库扩展困难:传统数据库容量扩展往往意味着服务中断,很难做到业务无感知或者少感知。
传统数据库使用成本高: 当业务数据和访问量增加到一定量时,传统数据库需要依赖特定的高端存储和小型机设备,成本曲线快速上升。
2ã产品架构
2.1产品服务架构
架构特点:
1、分库分表
支持 RDS/MySQL 的分库分表,在创建分布式数据库后,只需选择拆分键,DRDS 就可以按照拆分键生成拆分规则,实现数据水平拆分
2、透明读写分离
通过使用 RDS 只读实例或者 MySQL 备机实现读写分离,帮助应用解决事务、只读实例或者备机挂掉、指定主备访问等细节问题,对应用无侵入,在 DRDS 控制台即可完成读写分离相关操作。
3、数据存储平滑扩容
当出现数据存储容量和访问量瓶颈时,DRDS 支持在线存储容量扩展,扩容无需应用改造,扩容进度支持可视化跟踪。
2.2产品结构
DRDS web控制台
DRDS web控制台是面向用户使用DRDS的入口,在控制台用户可以管理DRDS实例、管理DRDS数据库、存储扩容、数据表管理等操作。
DRDS Manager
DRDS Manager是面向运维人员的管理入口,它可以帮助用户管理DRDS实例的生命周期、管理DRDS实例节点。
DRDS Server
DRDS Server是DRDS数据库服务入口,是 DRDS 核心组件,提供 SQL 的解析、优化、路由和结果归并。
ä¸ã产品特性
1ãDRDS相关术语解释
DRDS 实例
DRDS 实例是由一组 DRDS Server 节点组成的分布式数据库服务集群。各服务节点无状态,同时处理 SQL 请求。
DRDS 实例规格
DRDS 实例规格是 DRDS 实例处理能力体现,按照 CPU 和 内存提供不同的规格的实例,规格越高处理能力越强。如 4Core8G 和 8Core16G,在标准的 DRDS 测试场景下,后者的处理能力是前者的两倍。
实例升降配
DRDS 可以通过改变实例规格来改变处理能力,提升实例规格称为升配,降低实例规格称为降配。
水平拆分
水平拆分是将一个单机数据库拆分为多个物理分库,将数据库中的表数据按照拆分规则,拆分为多个物理分表,存储到不同的数据库分库上的过程。
拆分规则
水平拆分过程中将逻辑数据库表拆分为多个物理分表规则称为拆分规则。
拆分键
水平拆分过程中,生成拆分规则的数据库字段称为拆分键。
分库
DRDS 水平拆分后,逻辑数据库数据存储在多个物理存储实例上,每个存储实例上的物理库称为分库。
分表
DRDS 水平拆分后,每一个分库上的物理数据表称为分表。
逻辑 SQL
由应用端发送到 DRDS 的 SQL 称为逻辑 SQL。
物理 SQL
由 DRDS 对逻辑 SQL 进行解析之后发送到 RDS 上执行的 SQL 称为物理 SQL。
透明读写分离
DRDS 的单个存储实例节点遇到访问瓶颈时,可通过增加只读实例来分担主实例的压力。DRDS 的读写分离功能不需要修改任何应用代码,称为透明读写分离。
非拆分模式
DRDS 支持不进行数据库水平拆分而仅通过 DRDS 提供的透明读写分离来扩展数据库的服务能力。这种模式称为非拆分模式。
平滑扩容
DRDS 可通过增加存储实例节点完成数据库的扩容。扩容不影响原有数据的正常访问,称为平滑扩容。
小表广播
DRDS 将一些数据量小且更新频度不高的数据表存储为单表模式,这些数据表称为小表。通过数据同步将小表复制到与之 JOIN 的分库上进而提升 JOIN 效率的解决方案称为“小表广播”或者“小表复制”。
全表扫描
数据库拆分模式下,如果 SQL 语句中没有指定拆分键,DRDS 将在所有分表上执行 SQL 并归并结果返回,这个过程称为全表扫描。为避免影响性能,用户应尽量避免全表扫描。
全局唯一数字序列(DRDS Sequence)
DRDS 全局唯一数字序列(64位数字,对应 MySQL 中 BIGINT 类型)的主要目标是为了保证所定义唯一字段中的数据的全局唯一(比如 PRIMARY KEY,UNIQUE KEY 等)和有序递增。
DRDS 自定义注释(DRDS Hint)
DRDS 提供的自定义注释,用于指定一些特殊行为,通过相关的语法影响 SQL 的执行方式,从而对 SQL 进行特殊的优化。
DRDS 实例连接
当应用程序连接 DRDS 实例执行操作时,从 DRDS 实例的角度看,会有两种类型的连接:
前端连接:由应用程序建立的,到 DRDS 实例中逻辑库的连接;
后端连接:由 DRDS 实例中的节点建立的,到后端 RDS 实例中物理库的连接。
2、功能特性
分库分表:支持 RDS/MySQL 的分库分表,在创建分布式数据库后,只需选择拆分键,DRDS 就可以按照拆分键生成拆分规则,实现数据水平拆分。水平拆分是将一个单机数据库拆分为多个物理分库,将数据库中的表数据按照拆分规则,拆分为多个物理分表,存储到不同的数据库分库上的过程。
分库分表示意图如下:
透明读写分离:通过使用 RDS 只读实例或者 MySQL 备机实现读写分离,帮助应用解决事务、只读实例或者备机挂掉、指定主备访问等细节问题,对应用无侵入,在 DRDS 控制台即可完成读写分离相关操作。
透明读写分离示意图如下:
数据存储平滑扩容:当出现数据存储容量和访问量瓶颈时,DRDS 支持在线存储容量扩展,扩容无需应用改造,扩容进度支持可视化跟踪。
服务升降配:DRDS 实例可以通过改变资源数量实现服务能力的弹性扩展。
分布式运维指令集:DRDS 提供独有分布式数据库运维指令集,如 SHOW SLOW、TRACE、SHOW NODE 等指令,快速发现和定位问题。
全局唯一数字序列:DRDS 支持分布式全局唯一且有序递增的数字序列。满足业务在使用分布式数据库下对主键或者唯一键以及特定场景的需求。
数据库账号权限体系:DRDS 支持类单机 MySQL 账号和权限体系,确保不同角色使用的账号操作安全。
分布式事务:DRDS 结合分布式事务套件 GTS,可以支持分布式事务,保证分布式数据库数据一致性。
分布式事物执行示意图:
监控报警:DRDS 支持对核心资源指标和数据库实例指标的实时监控和报警,如实例 CPU、网络 IO、活跃线程等,实时发现资源和性能瓶颈。
3、产品优势
分布式:数据读写存储集群化,不受单机限制,业务使用无连接数限制;
弹性:数据服务可升降配,数据存储白屏化 scale-up 和 scale-out,读写分离线性提升读能力;
高性能:分库分表经典方案让操作聚焦少量数据,多种拆分方式适应数据特点,并具备特定 SQL 并行执行能力,进一步提升执行效率;
安全:完整的类单机 MySQL 账号体系,提供具备授权鉴权的 Open API 方便集成能力到业务管控中,产品服务支持体系化;
简单易用:兼容 MySQL 协议和大部分 MySQL SQL 语法,无业务侵入式使用读写分离,全面的运维和监控能力。
四、应用场景
1、大规模在线数据操作
场景及解决方案:
1、在线实时业务数据库标准
面向客户端的电商、金融、O2O、零售等行业普遍存在用户基数大、营销活动频繁、核心交易系统数据库响应日益变慢的问题,制约业务发展。 DRDS 提供线性水平扩展能力,能够实时提升数据库处理能力,提高访问效率,峰值 TPS 达150万+,轻松应对高并发的实时交易场景。
2、能够解决
事务支持、单分库严格事务支持,跨分库配合GTS支持分布式事务。
3、MySQL兼容性
兼容MySQL交互协议和大部分SQL,让业务使用更加平滑。
4、大规模
通过分库分表,提供可扩展的服务容量和存储容量。
部署结构:
2、数据高效分片
场景及解决方案:
1、数据高效分片
多种分片方式支持、提供按数字、字符串、时间单独或者混合分片,让操作100亿数据如同操作100万数据高效;
2、能够解决
大数据高效访问、通过分库分表,让操作聚焦少量数据,提升操作效率;
3、拆分效率
时间拆分,单/双字段拆分,hash算法优化让数据更加均衡;
4、跨分片数据聚合
跨分片聚合函数、order by/group by/limit m,n、join/子查询等支持。
部署架构:
3ã在线离线数据中转
场景及解决方案:
1、大容量数据驻留,类MySQL在线操作
企业客户随着业务的快速发展,业务数据增长迅猛,会产生超过单机数据库存储能力极限的数据,造成数据库容量瓶颈,限制业务发展。DRDS 可以线性扩展存储空间,目前可以支持 200+ MySQL 实例的单数据库集群,提供 PB 级存储能力。可广泛应用于工业制造、智能家居、车联网等超大规模数据存储访问场景。当业务收集云下或者端的数据到云上进行数据分析和智能报表,需要一个在存储容量和写入容量都可以扩展的类关系型数据库存在,DRDS通过MySQL兼容、弹性扩展很好地适应了这个诉求;
2、能够解决
大容量、满足大容量数据存储和数据实时大量写入的诉求;
3、在线操作
解决数据采集端到数据分析端中途数据停留和在线操作变更的诉求;
部署架构:
4、高性价比数据库解决方案
政务机构、大型企业、银行等行业为了支持大规模数据存储和高并发数据库访问,传统方案需要强依赖小型机和高端存储等高成本的商业解决方案,以达到服务能力扩展的目的。DRDS 能够利用普通服务器提供阿里巴巴双十一同等处理能力的高性价比国产化数据库解决方案。
5、低运维成本数据库
初创型企业初期发展阶段技术积累相对比较薄弱,资金投入有限,业务发展快,数据库的稳定性风险高。DRDS 继承了阿里巴巴多年的分布式数据库技术积累,能够提供简单易用的数据库运维系统,降低企业的技术运维成本,赋予企业强大的数据库支撑能力,为企业发展保驾护航。
6、数据备份
企业可以利用 DRDS 将自建数据库数据备份到云上,实现云上的数据备份容灾。
五、兼容性及限制
1、SQL兼容性
DRDS SQL 限制
SQL 大类限制:
暂不支持用户自定义数据类型、自定义函数。
暂不支持视图、存储过程、触发器、游标。
暂不支持 BEGIN…END、LOOP…END LOOP、REPEAT…UNTIL…END REPEAT、WHILE…DO…END WHILE 等复合语句。
暂不支类似 IF ,WHILE 等流程控制类语句。
小语法限制:
DDL
CREATE TABLE tbl_name LIKE old_tbl_name 不支持拆分表。
CREATE TABLE tbl_name SELECT statement 不支持拆分表。
DML
暂不支持 SELECT INTO OUTFILE/INTO DUMPFILE/INTO var_name。
暂不支持 INSERT DELAYED Syntax。
暂不支持非 WHERE 条件的 Correlate Subquery。
暂不支持 SQL 中带聚合条件的 Correlate Subquery。
暂不支持 SQL 中对于变量的引用和操作,比如 SET @c=1, @d=@c+1; SELECT @c, @d。
数据库管理:
SHOW WARNINGS Syntax 不支持 LIMIT/COUNT 的组合。
SHOW ERRORS Syntax 不支持 LIMIT/COUNT 的组合。
DRDS SQL 兼容
协议兼容:
DRDS 支持 MySQL Workbench , Navicat For MySQL , SQLyog 等主流客户端。
DDL 语法兼容:
CREATE TABLE Syntax
CREATE INDEX Syntax
DROP TABLE Syntax
DROP INDEX Syntax
ALTER TABLE Syntax
TRUNCATE TABLE Syntax
DML 语法兼容
INSERT Syntax
REPLACE Syntax
UPDATE Syntax
DELETE Syntax
Subquery Syntax
Scalar Subquery
Comparisons Subquery
Subqueries with ANY, IN, or SOME
Subqueries with ALL
Row Subqueries
Subqueries with EXISTS or NOT EXISTS
Subqueries in the FROM Clause
SELECT Syntax
其他兼容语法参考:
https://help.aliyun.com/document_detail/49249.html?spm=a2c4g.11186623.6.544.FvPEC2
2、DRDS命令支持
DRDS 自定义指令、自定义hint、DDL语法和自定义拆分函数使用参考:
https://help.aliyun.com/document_detail/49249.html?spm=a2c4g.11186623.6.544.FvPEC2
å ã数据迁移
DRDS 支持多种方式进行数据迁移,包括 MySQL 官方的 mysqldump、source 命令,阿里云的数据传输服务 DTS,数据集成(Data Integration),以及通过编写代码的方式进行数据迁移。
1、使用 mysqldump 导入导出数据
参考:
https://help.aliyun.com/document_detail/29687.html?spm=a2c4g.11186623.6.640.1OOtuC
2、dts迁移
参考:
https://help.aliyun.com/document_detail/48470.html?spm=a2c4g.11186623.2.5.78huPB
3、使用程序进行大数据导入
参考:
https://help.aliyun.com/document_detail/53107.html?spm=a2c4g.11186623.6.641.K7MUF4
4ã通过数据集成(Data Integration)导入导出数据
参考:
https://help.aliyun.com/document_detail/57666.html?spm=a2c4g.11186623.6.642.gUZnER
七、监控备份
1、性能监控
DRDS 提供了数据库的 QPS、应用到 DRDS 的连接数、活跃线程三个指标在一定时间段内的监控信息。通过监控信息,可以查看 DRDS 上数据库的运行情况.
实例监控主要分为资源监控和 DRDS 引擎监控。引擎层面的监控指标又可以分成 DRDS 实例级别和 DRDS 库级别两个维度的监控,当某些引擎类的监控指标出现异常的时候,可以直接查看各个数据库的监控指标,从而定位到有性能问题的数据库。
各项指标解释说明如下,重点关注飘红指标及报警设置:
监控项 |
监控项分类 |
含义 |
说明 |
CPU 利用率 |
资源监控 |
DRDS 服务节点的 CPU 利用率的平均值 |
|
网络输入流量 |
资源监控 |
DRDS 服务节点的网络输入流量的总和 |
RDS 返回数据到 DRDS,会产生网络输入流量 |
网络输出流量 |
资源监控 |
DRDS 服务节点的网络输出流量的总和 |
DRDS 发送物理 SQL 到 RDS,DRDS 返回数据到应用,均会产生网络输出流量 |
逻辑 QPS |
引擎监控 |
DRDS 服务节点每秒处理的 SQL 语句数目的总和 |
|
物理 QPS |
引擎监控 |
DRDS 服务节点每秒发送到 RDS 的 SQL 操作数总和 |
一条逻辑 SQL 可能会拆分成多条物理 SQL |
逻辑 RT |
引擎监控 |
DRDS 对于每条 SQL 的平均响应时间 |
如果逻辑 SQL 会变成物理 SQL 下发,那么此条 SQL 的 逻辑 RT 会包含物理 SQL 的 RT |
物理 RT |
引擎监控 |
DRDS 发送到 RDS 的 SQL 的平均响应时间 |
|
连接数 |
引擎监控 |
应用到 DRDS 的连接总数 |
不包括 DRDS 到 RDS 的连接 |
活跃线程数 |
引擎监控 |
DRDS 用来执行 SQL 的线程数 |
|
3、克隆实例
DRDS 提供了实例克隆的功能,方便您快速复制线上环境。实例克隆功能可以用于预发环境创建、压测及问题排查等。如果当前库中数据被误删,也可以利用实例克隆功能快速进行数据恢复。
创建克隆实例时,可以根据指定的 DRDS 实例和数据库,选择相应的时间点进行快速克隆。克隆的内容包括底层 RDS 实例(如备份设置、数据、网络类型),以及 DRDS 中的逻辑库(如分库数量等)。
说明:
1、支持DRDS DB整体克隆,包括DRDS实例,以及相关的RDS实例;
2. 支持克隆到某一个时间点的数据;
操作步骤:
1、在 DRDS 控制台左侧菜单栏选择实例管理,单击要操作的实例名称,进入实例基本信息页。
2、在实例基本信息页,单击右上角的克隆实例按钮。
3ã在克隆实例对话框,输入克隆任务名称,选择需要克隆的库,以及需要恢复的时间点,单击预检查。DRDS 会对实例的克隆能力进行检测,确保实例满足克隆条件。
4、预检测通过后,单击去开通。
5、在订单确认页面,确认需要开通的实例信息,单击去开通开始实例克隆。页面提示开通成功后,可以回到克隆列表查看克隆任务的状态。
克隆任务运行时间根据数据量大小会有所不同,请耐心等待。
八、DRDS实践操作
8.1 DRDS服务开通过程
DRDS快速开通流程如下图所示:
详细操作过程参考:
https://help.aliyun.com/document_detail/50067.html?spm=a2c4g.11186623.6.549.ilUaDv
8.2 如何选择拆分键
拆分键即分库/分表字段,是在水平拆分过程中用于生成拆分规则的数据表字段。DRDS 根据拆分键的值将数据表水平拆分到每个 RDS 实例上的物理分库中。
数据表拆分的首要原则,就是要尽可能找到数据表中的数据在业务逻辑上的主体,并确定大部分(或核心的)数据库操作都是围绕这个主体的数据进行,然后可使用该主体对应的字段作为拆分键,进行分库分表。
例子参考:
https://help.aliyun.com/document_detail/51309.html?spm=a2c4g.11186623.6.647.Z7JpuA
8.3如何选择 DRDS 与 RDS 实例规格
DRDS 与 RDS 按照 CPU 的处理能力、内存容量和磁盘空间等来划分实例的规格,并提供多种不同规格的实例供选择,规格越高代表实例的处理能力越强。
实例规格选择参考:
https://help.aliyun.com/document_detail/51308.html?spm=a2c4g.11186623.6.646.P1cckm
8.4 如何选择分片数
DRDS 中的水平拆分有两个层次:分库和分表。每个 RDS 实例上默认会创建8个物理分库,每个物理分库上可以创建一个或多个物理分表。分表数通常也被称为分片数。一般情况下,建议单个物理分表的容量不超过500万行数据。
拆分方法参考:
https://help.aliyun.com/document_detail/51307.html?spm=a2c4g.11186623.6.648.b4yjh3
8.5 SQL优化
优化方法参考:
https://help.aliyun.com/document_detail/50845.html?spm=a2c4g.11186623.6.651.BRZSlc
8.6 排查慢SQL
DRDS 将执行时间超过1秒的 SQL 定义为慢 SQL。DRDS 中的慢 SQL 分为两种:逻辑慢 SQL 和 物理慢 SQL。
逻辑慢 SQL:应用发送到 DRDS 的 慢 SQL;
物理慢 SQL:DRDS 发送到 RDS 的 慢 SQL。
排查方法参考:
https://help.aliyun.com/document_detail/29673.html?spm=a2c4g.11186623.6.653.o7vngO
8.7 实例扩容
DRDS 平滑扩容是指通过增加 RDS 的数量以提升整体性能。当 RDS 的 IOPS、CPU、磁盘容量等指标到达瓶颈,并且 SQL 优化、RDS 升配已无法解决瓶颈(例如磁盘已升至顶配)时,可通过 DRDS 水平扩容增加 RDS 数量,提升 DRDS 数据库的容量。
扩容示意图如下:
平滑扩容过程如下图所示:
操作步骤参考:
https://help.aliyun.com/document_detail/52013.html?spm=a2c4g.11186623.6.658.XiVRC3
8.8实例升级
数据库性能主要可以从响应时间(RT)和容量(QPS)两个指标进行衡量。RT 指标反映的是单个 SQL 的性能,这类性能问题可以通过 SQL 优化等方法进行解决。DRDS 升配则主要通过扩充容量来提升性能,适用于低延时高 QPS 类型的数据库访问业务。
DRDS 实例性能取决于 DRDS 本身和 RDS 的性能表现,任一 DRDS 或者 RDS 节点性能不足都会导致整体性能出现瓶颈。
规格升级操作参考:
https://help.aliyun.com/document_detail/52014.html?spm=a2c4g.11186623.6.657.bU7U6X
ä¹ã最佳实践
吉利汽车阿里云实践
参考地址:
https://yq.aliyun.com/articles/71031?spm=a2c4e.11153959.blogcont434945.15.3aecd104LMAjYd
物流公司G7上云
https://yq.aliyun.com/articles/434917?spm=a2c4e.11163080.searchblog.197.27e82ec1HbQpqt
更多DRDS案例可以参考: