玩转阿里云:如何使用DRDS突破单个数据库瓶颈

2022-03-28 00:00:00 拆分 数据 数据库 字段 架构

业务场景

在实际工作中,由于企业的业务量会逐渐增多,企业后端的单个关系型数据库经常会面临如下问题:

存储容量瓶颈问题:大量的历史订单存储在某个数据库,可能导致数据库存储容量达到瓶颈,通常我们可以通过在一台机器下面挂载多块磁盘,达到10TB/20TB/30TB的容量。然后再使用一个MySQL实例支持,但数据备份,数据管理(DDL),数据检索与更新性能(DML)都会出现大幅下滑。

访问容量瓶颈问题:当大量客户的访问请求发送到单个数据库,数据库响应连接的进程数达到瓶颈,导致数据库无法响应客户端的请求,影响业务的正常处理。虽然我们可以通过增加CPU/内存/磁盘/网络等硬件缓解这种情况,但是廉价X86 PC做到几十核目前就是顶配了,内存几百G也无法容纳几十T数据的各种索引,磁盘IO毕竟比内存还是差一些,通用网络也就到万兆,本质上是无法避免数据库单机瓶颈的。

容灾问题:单机总存在着0或者1的问题,所以做热备冷备,以求出故障时能够快速切换,但是数据库并不是应用,数据库存在状态,存在事务,真正宕机切换对于核心业务来说真的是一个很艰难的决定。


对于阿里云的客户,可以使用分布式数据库DRDS服务解决如上问题:

  1. 利用DRDS的分库分表功能分散单个数据库的整体访问压力;

  2. 由于DRDS的数据水平拆分对用户使用有一定的限制,所以DRDS还提供更低业务侵入性的读写分离功能;

  3. DRDS自动继承快速扩展能力,稳定性监控,资源隔离,灾备恢复等特性。


总体来说,解决数据库容量问题的产品都是基于share anything或者share nothing架构:


share anything 架构使用共享内存、共享存储、infinibind、高配物理机结合出一个全功能数据库这样的架构能够满足大部分用户的数据容量需求,但是本质上如同小型机+数据库,因此,这样的架构仍然会碰到容量天花板,并且相当昂贵;

share nothing架构使用多个廉价PC做数据拆分,服务和数据存储节点之间并不完全同步状态。这样的架构能够做到数据和访问容量通过简单堆叠机器进行扩展。DRDS就是利用这种架构,通过SQL引擎和自助管控系统尽可能降低用户对分布式细节的感知。


DRDS基本介绍

分布式数据库DRDS目前定位成一个中间件,在业务应用和RDS之间,本身不承担数据存储,只负责解决分布式情况下的数据操作、执行、数据处理等功能。DRDS的使用与MySQL非常接近,建实例、建库、建表、执行SQL操作,比较大的区别在于水平拆分模式下,DRDS对于建表需要指定拆分字段(类似索引),只要带上这个拆分字段,SQL只会在部分数据分片上执行,从而加速SQL执行速度。

“分库分表”在DRDS里面是一个很重要的概念。DRDS在后端将数据量较大的数据表水平拆分到后端的每个RDS数据库中,这些拆分到RDS中的数据库被称为分库,分库中的表称为分表。DRDS由每个数据库负责每一部分数据的读写操作,从而有效的分散了整体访问压力,在系统扩容时,只需要水平增加分库的数量,并迁移相关数据,就可以提高DRDS系统的总容量。

“拆分键”是分库分表的重要概念,拆分键也称为分库/分表字段。DRDS根据拆分键的值将数据表水平拆分到后端的每个RDS分库里。也就是,键值相同的数据,一定会位于同一个RDS数据库里。DRDS除了可以定义分库键以外,每一张逻辑表都可以定义自己的拆分键。拆分键暂时只能是单个字段。如果分库键与分表键相同,那么在插入时只需要指定该分库/分表键。如果分库键与分表键不同,则在插入时需要分别指定分库键和分表键。


DRDS水平拆分原理

拆分字段:是DRDS中数据分布和SQL路由的凭证。



图 1


数据分布:DRDS中的数据是按照拆分字段值,加上特定的算法进行计算,根据结果存储数据到对应分片



 

图 2


SQL路由:当用户SQL遇到DRDS时,DRDS会理解整个SQL含义,然后按照拆分字段的值和执行策略将SQL路由到对应分区进行执行。


 

图 3


数据合并:如果一个SQL对应多个分片数据执行,DRDS会将各个分片返回的数据按照原始SQL语义进行合并。



 

图 4


云中沙箱DRDS初级实验介绍


云中沙箱(http://www.aliyunedu.net为学员提供一个云端实验平台,帮助用户熟练运用阿里云产品、技术、服务与解决方案,提升用户在阿里云上工作的操作能力。


云中沙箱提供 “SL034 使用分布式数据库DRDS突破单个数据库瓶颈” 自助实验,沙箱平台会在实验开始时,创建一台RDS实例和一台DRDS共享实例。首先,将数据样本导入到RDS新建数据库。模拟客户实际工作中,将百万行数据存储在单个RDS数据库中的场景。然后,使用DRDS建立拆分数据库和拆分数据表,也就是利用DRDS中的hash方法对单个RDS数据库进行拆分。之后,导入数据,开始进行拆分,将单个表中的数据可以拆分到分表中。后,通过DMS查看分库分表的结果。


通过此实验,用户有能力掌握:

  1. 在阿里云上使用DRDS拆分键,将RDS水平拆分;

  2. 通过 hint 方式实现对拆分的数据库进行查询。


实验架构图:



 

图 5

原文链接:https://mp.weixin.qq.com/s/Xa_a9y76sA1R5UM7bN25wA

相关文章