随着互联网快速发展,我们的结构化关系数据库在高并发、海量数据的情况下面临单机扩展性问题,首先是单机数据库容量瓶颈,单机数据库在业务高速增长的情况下依赖硬件升级也会到达天花板,并且使用成本变得非常高,而且扩展性的复杂性也是比较高,传统数据库扩容往往意味着服务中断,很难做到业务无感知或者少感知。
通过数据水平切换来现实分库可以帮助提升数据库整体性能、横向扩展性,切分后有效的降低了单台机器的访问负载,同时最大限度的降低了数据库服务节点宕机后的损失。
传统应用业务层逻辑或组件分库实现方式
应用和数据库按业务地域水平拆分
应用JDBC驱动层组件封装实现水平拆分
传统模式的分库我们看以看到有把系统应用及数据库按业务属性(比如城市、区域、类型等)水平拆分为多个独立分系统,通过在接入层做路由;另外就是在应用通过封装JDBC Driver组件来实现访问分库,类似于通过MySQL的JDBC驱动访问MySQL。传统模式的分库方式虽然使用简单实用容易上手,但是版本难以控制/问题难以追踪排除,并且DB连接仍然和传统数据库一样无法收敛。
阿里云DRDS+RDS分布式数据库功能及优势
基于阿里云DRDS+RDS实现的分布式数据库数据读写存储集群化,不受单机限制,业务使用的连接数也无限制,DRDS中间件服务节点及后端RDS存储服务点都可以支持横向和纵向升级扩展,支持多种拆分模式规则,实现数据水平拆分;兼容 MySQL 协议和大部分 MySQL SQL 语法,无业务侵入式使用读写分离,提供全面的运维和监控能力:
分库分表:支持 RDS/MySQL 的分库分表,在创建分布式数据库后,只需选择拆分键,DRDS 就可以按照拆分键生成拆分规则,实现数据水平拆分。
透明读写分离:通过使用 RDS 只读实例或者 MySQL 备机实现读写分离,帮助应用解决事务、只读实例或者备机挂掉、指定主备访问等细节问题,对应用无侵入,在 DRDS 控制台即可完成读写分离相关操作。
数据存储平滑扩容:当出现数据存储容量和访问量瓶颈时,DRDS 支持在线存储容量扩展,扩容无需应用改造,扩容进度支持可视化跟踪
服务升降配:DRDS 实例可以通过改变资源数量实现服务能力的弹性扩展。
分布式运维指令集:DRDS 提供独有分布式数据库运维指令集,如 SHOW SLOW、TRACE、SHOW NODE 等指令,快速发现和定位问题。
全局唯一数字序列:DRDS 支持分布式全局唯一且有序递增的数字序列。满足业务在使用分布式数据库下对主键或者唯一键以及特定场景的需求。
数据库账号权限体系:DRDS 支持类单机 MySQL 账号和权限体系,确保不同角色使用的账号操作安全。
分布式事务:DRDS 结合分布式事务套件 GTS,可以支持分布式事务,保证分布式数据库数据一致性。
监控报警:DRDS 支持对核心资源指标和数据库实例指标的实时监控和报警,如实例 CPU、网络 IO、活跃线程等,实时发现资源和性能瓶颈。
数据迁移-多分库DB数据迁移到DRDS+RDS分布式单个逻辑库
目前阿里云提供数据迁移工具DTS或数据集成等产品,另外数据集成开源版Datax可以下载部署支持更灵活的方式;
数据传输(数据传输(Data Transmission)是阿里云提供的一种支持RDBMS(关系型数据库)、NoSQL、OLAP等多种数据源之间数据交互的数据服务。它提供了数据迁移、实时数据订阅及数据实时同步等多种数据传输能力。通过数据传输可实现不停服数据迁移、数据异地灾备、跨境数据同步、缓存更新策略等多种业务应用场景)是阿里云提供的一种支持RDBMS(关系型数据库)、NoSQL、OLAP等多种数据源之间数据交互的数据服务。它提供了数据迁移、实时数据订阅及数据实时同步等多种数据传输能力。通过数据传输可实现不停服数据迁移、数据异地灾备、跨境数据同步、缓存更新策略等多种业务应用场景
Mysql到DRDS数据迁移指导手册: https://help.aliyun.com/document_detail/48470.html
数据集成是稳定高效、弹性伸缩的数据同步平台,提供丰富的异构数据源之间数据高速稳定的数据移动及同步能力。丰富的数据源支持:文本存储(FTP/SFTP/OSS/多媒体文件 等)、数据库(RDS/DRDS/MySQL/PostgreSQL 等)、NoSQL(Memcache/Redis/MongoDB/HBase 等)、大数据(MaxCompute/ AnalyticDB/HDFS 等) 、MPP数据库(HybridDB for MySQL等)
迁移工具 |
部署方式 |
迁移方式 |
优势 |
DTS |
PAAS云服务 |
全量+增量 |
不停服迁移/白屏化操作 |
数据集成 |
PAAS云服务 |
全量 |
支持数据库类型丰富/白屏化操作/同步任务管理 |
Datax |
自建部署 |
全量 |
灵活,可满足复杂数据迁移场景 |
1. 对于传统分库方式往DRDS+RDS的数据迁移,分库数比较少/要求不停服的情况下可以使用DTS,主要是因为每个源分库需要创建一个数据迁移任务,如果分库数较多,那么创建迁移任务的工作量也是很大的;另外对于目标数据源结构变化大,需要源数据库多表合并jion迁移到目标库的场景不适应DTS,可以使用数据集成
2. 分库数较多和需要源数据库多表合并jion迁移到目标库,比如几十上百分库数的,建议使用数据集成或datax来迁移数据;但不支持增量迁移,要实现增量迁移的需要源表有insert或update时间戳