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

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 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 按年日哈希,改进型

目录
相关文章
|
2月前
|
监控 负载均衡 Dubbo
|
2月前
|
运维 Oracle 容灾
Oracle dataguard 容灾技术实战(笔记),教你一种更清晰的Linux运维架构
Oracle dataguard 容灾技术实战(笔记),教你一种更清晰的Linux运维架构
|
9天前
|
存储 缓存 运维
Lustre架构介绍的阅读笔记-HSM
HSM(Hierarchical Storage Management)是数据分级存储管理,根据数据生命周期、访问特性和设备成本,自动在CPU寄存器、缓存、主存、SSD、HDD、光盘、磁带库等不同存储层级间迁移数据。数据热度分为热、温、冷、冰,对应不同成本、性能和容量。迁移策略可基于人工判断或系统自动计算,并确保业务I/O不受影响、数据一致性。访问频率增加时,数据可反向迁移至更高层级。
|
9天前
|
存储 消息中间件 缓存
Lustre架构介绍的阅读笔记-NFS兼容性
Lustre是分布式NFS系统,融合了分布式系统和NFS特性。它支持线性扩展容量和性能,提供POSIX语义,隐藏复杂存储细节。关键技术涉及分布式计算、缓存、锁、事务、通信(RPC、消息队列、同步/异步模式)、选举、任务调度、健康检查、负载均衡、集群管理和QoS。数据一致性、复制(副本、EC)、热点管理及多种上层协议(如NFS、S3)也是重点。分布式存储通过扩容提升读写带宽和IOPS。
|
18天前
|
Java API Android开发
技术经验分享:Android源码笔记——Camera系统架构
技术经验分享:Android源码笔记——Camera系统架构
21 0
|
2月前
|
安全 网络协议 网络安全
网络安全笔记整理,你花了多久弄明白架构设计
网络安全笔记整理,你花了多久弄明白架构设计
|
2月前
|
存储 传感器 网络协议
《物联网技术》课程笔记——第二章 物联网技术架构
《物联网技术》课程笔记——第二章 物联网技术架构
|
2月前
|
安全 Java 数据库
SpringSecurity+JWT前后端分离架构登录认证
在SpringSecurity实现前后端分离登录token认证详解_springsecurity前后端分离登录认证-CSDN博客基础上进行重构,实现前后端分离架构登录认证,基本思想相同,借鉴开源Gitee代码进行改造,具有更好的代码规范。
227 1
|
2月前
|
网络协议 Devops 大数据
【分布式】大型互联网项目特点
【1月更文挑战第25天】【分布式】大型互联网项目特点
|
2月前
|
存储 缓存 监控
【分布式】大型互联网项目架构目标
【1月更文挑战第25天】【分布式】大型互联网项目架构目标