Aliware(企业级互联网架构ACP)复习整理-DRDS

DRDS的基础原理是Sharding,即数据分片,是典型的水平扩展分布式数据库模型,和传统单机数据库share anything架构不一样,DRDS采用的是share nothing架构。DRDS主要解决单机数据库容量瓶颈,单机数据库扩展困难,传统数据库使用成本高的问题,是高性价比,低运维成本的分布式数据库。主要场景是大规模在线数据操做,如 : 高并发实时交易,海量数据存储和访问,数据库云上备份容灾。DRDS兼容MySQL协议和语法,支持分库分表、平滑扩容、服务升降配、透明读写分离,分布式事务,分布式数据库生命周期管理。sql


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,状态为运行中)做为存储节点。若是选择的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、SHOW等读操做。


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(支持按时间分表,但不支持按时间分库)。


DRDS拆分键是生成拆分规则的数据库字段,只支持单个字段,建好分库分表后拆分键不能变动,值不可修改。选择拆分键请尽可能规避热点数据。拆分原则是 : 尽量找到数据表中的数据在业务逻辑上的主体。


DRDS SQL路由,即按照拆分键和SQL语义把SQL分发到底层各个存储的分表进行执行。拆分键是DRDS中数据分布和SQL路由的凭证,DRDS将返回的数据按照原始SQL语义进行合并返回给用户。


DRDS中的sequence序列的特色是全局惟一,有序递增,分为三种类型 : Group,Time,SimpleDRDS默认使用Group(不会单点,性能好),但序列不连续、可能会有跳跃段,不能循环,不会严格从起始值开始取值(即show sequences命令看到的不必定是最大值)。Time(性能很高),用于自增时必须是BIGINT类型。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默认支持只单机事务,不支持跨库事务。分布式事务服务请单独申请开通。

相关文章
相关标签/搜索