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

服务架构.png

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控制台地址为 https://drds.console.aliyun.com
DRDS控制台提供查看数据库具体信息、删除数据库、重置密码、只读用户管理等功能。
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 按年日哈希,改进型
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容