ACP互联网架构认证笔记 DRDS分布式关系型数据库服务

简介: DRDS的基础原理是Sharding,即数据分片,是典型的水平扩展分布式数据库模型,和传统单机数据库share anything架构不同,DRDS采用的是share nothing架构。


DRDS的基础原理是Sharding,即数据分片,是典型的水平扩展分布式数据库模型,和传统单机数据库share anything架构不同,DRDS采用的是share nothing架构。 DRDS主要解决单机数据库容量瓶颈,单机数据库扩展困难,传统数据库使用成本高的问题,是高性价比,低运维成本的分布式数据库。主要场景是大规模在线数据操作,如 : 高并发实时交易,海量数据存储和访问,数据库云上备份容灾。DRDS兼容MySQL协议和语法,支持分库分表、平滑扩容、服务升降配、透明读写分离,分布式事务,分布式数据库生命周期管理。 share nothing架构核心思路利用普通的服务器,将单机数据拆分到底层的多个数据库实例上,通过统一的Proxy集群(DRDS 节点)进行SQL解析优化、路由和结果聚合,对外暴露简单唯一的数据库链接。 DRDS不支持Mysql视图、存储过程、跨库外键和级联删除,不支持自定义数据类型、流程控制类语句、自定义函数。 DRDS实例是由一组DRDS Server节点和底层存储组成的分布式集群,分为共享实例(规格只有8Core8G,使用公网地址)和专享实例(最小规格8Core16G,即两个DRDS节点,默认提供内网地址) DRDS Server,即DRDS节点,主要作用是SQL解析优化、路由和结果归并。 DRDS可以进行购买创建实例,创建克隆实例(DRDS实例必须是专享实例),实例间数据库迁移,实例释放,实例变配,平滑扩容操作。 DRDS实例性能主要由DRDS规格和选择的RDS性能决定。DRDS可进行性能监控,重要监控指标有逻辑QPS和物理QPS,连接数,线程活跃数,CPU 利用率,RT逻辑和物理RT,网络输入和输出流量。 DRDS实例变配(变配实例的规格,主要是增加了处理节点和均摊QPS)实现服务的弹性扩展,解决DRDS性能问题(资源合理利用和解决瓶颈)。衡量DRDS实例规格的重要指标是QPS,QPS和CPU性能是正相关的,CPU利用率超出90%或持续超出80%说明DRDS性能瓶颈,需要实例升配。衡量DRDS数据库性能主要从响应时间(RT)和QPS两个指标进行衡量,RT一般是单个SQL性能,可SQL优化解决,QPS性能请选择实例变配。 SQL优化 : 主要原则让更多的计算可以下推到RDS/MySQL上执行,DRDS可制定执行计划, DRDS是否需要平滑扩容(即增加RDS的数量)一般观察RDS的三个指标 : IOPS,CPU,磁盘空间。如果IOPS和CPU任何一个指标长期保持在80%以上或频繁收到报警信息,请尝试SQL优化,升高RDS规格或设置只读库,如果仍不能解决请进行扩容。RDS的磁盘容量剩余请尽量保持在30%以上。扩容有风险,扩容时请不要执行SQL,请在RDS低负载时和业务低谷期时进行,扩容不影响原有数据正常访问。 DRDS控制台地址为 drds.console.aliyun.comDRDS控制台提供查看数据库具体信息、删除数据库、重置密码、只读用户管理等功能。DRDS控制台不支持直接执行带有dbpartition 或 tbpartition 关键字的分布式DDL。 DRDS的数据库只能在控制台上面创建,需要选择至少一个(多个)RDS(类型为MySQL,状态为运行中)作为存储节点。 DRDS 目前不支持使用 DDL 语句直接建库,请登录 DRDS 控制台进行创建。具体操作指南请参考创建 DRDS 数据库如果选择的RDS区域和DRDS不相同,即跨区,会带来最高3ms的网络延迟。数据库创建类型分为拆分型(主要类型),非拆分型(将RDS数据库交由DRDS代理访问,实现读写分离)。拆分型的数据库,DRDS默认在1个RDS上创建8个物理库(不能更改),总物理库数量 = 选择RDS数量 * 8。分表数理论上没有限制,但受限于DRDS本身的规格资源。单个物理分表的容量不超过500万行数据。 删除数据库只会删除由DRDS所创建的数据库,不会影响原本在RDS上的数据库。 DRDS选择数据库连接池(提高了应用性能),主要作用是资源复用,提高系统响应效率,避免连接泄漏,DRDS可使用后端连接池数自动调整功能。 DRDS读写分离,对应用透明的设计,无需更改代码。拆分型只需在DRDS控制台中调整读权重比例(设置读策略),就可将读流量在主RDS和只读RDS中进行分流,写流量都在主RDS上,不分流。可通过SHOW NODE指令查看实际读流量分布。主RDS上是强读(强一致性,即强实时性),只读RDS上是弱读(存在毫秒级延迟),个别需要实时性、强一致性读的SQL可通过HINT实现。非拆分型直接选择RDS的数据库引入到DRDS做读写分离。读写分离只对查询有效,写请求和显式事务查询都在主RDS中DRDS HINT可指定在主RDS或只读RDS上执行SQL,HINT基于MySQL注释实现的。自定义的HINT作用读写分离(通过将SQL指定发给主RDS或自读RDS实现),切断延迟的只读RDS,自定义SQL超时时间,指定分库执行SQL,扫描全部分库分表。每个DRDS数据库可以创建一个只读用户,只读用户只能进行SELECT操作。DRDS 里通过 CREATE USER 创建出来的账号只存在于 DRDS,跟 RDS 没有任何关系,也不会同步到后端的 RDS 中去。只读账号的名字是数据库名加上 _RO 后缀,比如数据库名是 easydb,只读账号的名字就叫 easydb_RO。DRDS数据库的表操作权限有8个,CREATE、DROP、ALTER、INDEX、INSERT、DELETE、UPDATE、SELECT。进行相关操作必须要以上对应的权限,如TRUNCATE需要DROP权限,REPLACE需要INSERT和DELETE权限,INSERT ON DUPLICATE UPDATE需要INSERT和UPDATE权限。 DRDS广播表,(小表广播,主要提升JOIN效率,BROADCAST),DRDS将数据量小(小表),更新频率不高并设置为单表的表叫做广播表。广播表通过同步机制进行数据同步,有秒级延迟,广播表会在每一个分库中都会创建同样的表,但数据只存储在第一个分库上(即分库中数据不是全量复制)。 DRDS数据库水平拆分到每个RDS的数据库中,拆分的库叫分库,分库的表叫分表(也叫分片),拆分分为库级拆分(即进行分库),表级拆分(即进行分表)。通过拆分键实现,拆分键分为分库键(DB_PARTITION_KEY),分表键(TB_PARTITION_KEY)。可通过SHOW RULE查看数据库下每一个逻辑表的拆分情况。 通过SHOW TOPOLOGY查看逻辑表的拓扑分布(保存在哪些分库中,每个分库下包含哪些分表)。 dbpartition by hash(按hash分库),tbpartition by WEEK(支持按时间分表,但不支持按时间分库)。 tbpartitions :每个库上的物理表数目**(默认为1),如无需分表,就无需指定该字段 DRDS拆分键是生成拆分规则的数据库字段,只支持单个字段,建好分库分表后拆分键不能变更,值不可修改。选择拆分键请尽量规避热点数据。拆分原则是 : 尽可能找到数据表中的数据在业务逻辑上的主体。 DRDS SQL路由,即按照拆分键和SQL语义把SQL分发到底层各个存储的分表进行执行。拆分键是DRDS中数据分布和SQL路由的凭证,DRDS将返回的数据按照原始SQL语义进行合并返回给用户。 DRDS中的sequence序列的特点是全局唯一,有序递增**,分为三种类型 : Group,单元化Group,Simple。DRDS默认使用Group(不会单点,性能好),但序列不连续、可能会有跳跃段,不能循环,不会严格从起始值开始取值(即show sequences命令看到的不一定是最大值)。Simple(性能差),单调递增,有瓶颈,谨慎使用。 DRDS可以进行数据表管理,可查看表结构、设置全表扫描、删除表。DRDS可设置白名单。DRDS支持数据导入导出。DRDS支持分布式JOIN,但对复杂情况,如对大表之间的JOIN,执行代价高,速度过慢容易导致性能或者系统不可用。 全表扫描是SQL语句被分发到所有分库上执行,在执行带有WHERE条件的UPDATE、DELETE、SELECT语句时,SQL语句中没有使用拆分键或者虽指定拆分键但是范围太广会导致全表扫描。全表扫描默认是关闭的,响应较慢,避免在高并发业务场景中使用。DRDS将执行时间超过1秒的SQL定义为慢SQL,分为逻辑慢SQL(应用发送到DRDS,使用SHOW FULL SLOW查看),物理慢SQL(DRDS发送到RDS,使用SHOW FULL PHYSICAL_SLOW查看)。SHOW SLOW可查看慢SQL,SHOW PROCESSLIST查看数据库实时执行信息。DRDS支持由经典网络(Classic)切换到VPC(实例必须是共享实例,且地域和VPC的必须相同),切换后Classic类型的ECS无法访问DRDS,VPC环境的ECS才能访问VPC环境的DRDS。DRDS切换到VPC后,不会影响DRDS之下的RDS,RDS实例的域名会自动解析为VPC的IP段地址 ,因此RDS的网络类型不需要切换。DRDS默认支持只单机事务,不支持跨库事务。分布式事务服务请单独申请开通。

DRDS DDL 拆分函数对分库分表的支持情况


DRDS 是一个支持既分库又分表的数据库服务。目前 DRDS 分库函数与分表函数的支持情况如下:


拆分函数 描述 是否支持用于分库 是否支持用于分表
HASH 简单取模
UNI_HASH 简单取模
RIGHT_SHIFT 数值向右移
RANGE_HASH 双拆分列哈希
MM 按月份哈希
DD 按日期哈希
WEEK 按周哈希
MMDD 按月日哈希
YYYYMM 按年月哈希
YYYYWEEK 按年周哈希
YYYYDD 按年日哈希
YYYYMM_OPT 按年月哈希,改进型
YYYYWEEK_OPT 按年周哈希,改进型
YYYYDD_OPT 按年日哈希,改进型

目录
相关文章
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
1548 3
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
消息中间件 负载均衡 中间件
⚡ 构建真正的高性能即时通讯服务:基于 Netty 集群的架构设计与实现
本文介绍了如何基于 Netty 构建分布式即时通讯集群。随着用户量增长,单体架构面临性能瓶颈,文章对比了三种集群方案:Nginx 负载均衡、注册中心服务发现与基于 ZooKeeper 的消息路由架构。最终选择第三种方案,通过 ZooKeeper 实现服务注册发现与消息路由,并结合 RabbitMQ 支持跨服务器消息广播。文中还详细讲解了 ZooKeeper 搭建、Netty 集群改造、动态端口分配、服务注册、负载均衡及消息广播的实现,构建了一个高可用、可水平扩展的即时通讯系统。
1292 0
|
人工智能 安全 Java
智慧工地源码,Java语言开发,微服务架构,支持分布式和集群部署,多端覆盖
智慧工地是“互联网+建筑工地”的创新模式,基于物联网、移动互联网、BIM、大数据、人工智能等技术,实现对施工现场人员、设备、材料、安全等环节的智能化管理。其解决方案涵盖数据大屏、移动APP和PC管理端,采用高性能Java微服务架构,支持分布式与集群部署,结合Redis、消息队列等技术确保系统稳定高效。通过大数据驱动决策、物联网实时监测预警及AI智能视频监控,消除数据孤岛,提升项目可控性与安全性。智慧工地提供专家级远程管理服务,助力施工质量和安全管理升级,同时依托可扩展平台、多端应用和丰富设备接口,满足多样化需求,推动建筑行业数字化转型。
496 5
|
11月前
|
Cloud Native 关系型数据库 MySQL
免费体验!高效实现自建 MySQL 数据库平滑迁移至 PolarDB-X
PolarDB-X 是阿里云推出的云原生分布式数据库,支持PB级存储扩展、高并发访问与数据强一致,助力企业实现MySQL平滑迁移。现已开放免费体验,点击即享高效、稳定的数据库升级方案。
免费体验!高效实现自建 MySQL 数据库平滑迁移至 PolarDB-X
|
11月前
|
消息中间件 缓存 监控
中间件架构设计与实践:构建高性能分布式系统的核心基石
摘要 本文系统探讨了中间件技术及其在分布式系统中的核心价值。作者首先定义了中间件作为连接系统组件的"神经网络",强调其在数据传输、系统稳定性和扩展性中的关键作用。随后详细分类了中间件体系,包括通信中间件(如RabbitMQ/Kafka)、数据中间件(如Redis/MyCAT)等类型。文章重点剖析了消息中间件的实现机制,通过Spring Boot代码示例展示了消息生产者的完整实现,涵盖消息ID生成、持久化、批量发送及重试机制等关键技术点。最后,作者指出中间件架构设计对系统性能的决定性影响,
|
监控 Linux 应用服务中间件
Linux多节点多硬盘部署MinIO:分布式MinIO集群部署指南搭建高可用架构实践
通过以上步骤,已成功基于已有的 MinIO 服务,扩展为一个 MinIO 集群。该集群具有高可用性和容错性,适合生产环境使用。如果有任何问题,请检查日志或参考MinIO 官方文档。作者联系方式vx:2743642415。
4251 57
|
文字识别 运维 监控
架构解密|一步步打造高可用的 JOCR OCR 识别服务
本文深入解析了JOCR OCR识别服务的高可用架构设计,涵盖从用户上传、智能调度、核心识别到容错监控的完整链路,助力打造高性能、低成本的工业级OCR服务。
540 0
架构解密|一步步打造高可用的 JOCR OCR 识别服务
|
存储 关系型数据库 数据库
高性能云盘:一文解析RDS数据库存储架构升级
性能、成本、弹性,是客户实际使用数据库过程中关注的三个重要方面。RDS业界率先推出的高性能云盘(原通用云盘),是PaaS层和IaaS层的深度融合的技术最佳实践,通过使用不同的存储介质,为客户提供同时满足低成本、低延迟、高持久性的体验。
|
存储 Cloud Native 关系型数据库
PolarDB开源:云原生数据库的架构革命
本文围绕开源核心价值、社区运营实践和技术演进路线展开。首先解读存算分离架构的三大突破,包括基于RDMA的分布式存储、计算节点扩展及存储池扩容机制,并强调与MySQL的高兼容性。其次分享阿里巴巴开源治理模式,涵盖技术决策、版本发布和贡献者成长体系,同时展示企业应用案例。最后展望技术路线图,如3.0版本的多写多读架构、智能调优引擎等特性,以及开发者生态建设举措,推荐使用PolarDB-Operator实现高效部署。
618 4