
# 产品架构和功能原理
DRS的产品架构以及功能原理如下图所示：
图1DRS产品架构   
![](https://support.huaweicloud.com/productdesc-drs/figure/zh-cn_image_0000001510052053.png "点击放大")
#### 架构说明
- 最小权限设计
  1. 采用JDBC连接，无需在用户的源数据库、目标数据库节点部署程序。
  
  2. 任务独立虚拟机运行时独享资源，租户之间数据隔离。
  
  3. 采用最小IP资源，在源数据库、目标数据库仅开放DRS数据迁移实例节点IP访问权限，无需增加网段。
   
- 可靠性设计
  1. 连接异常自动重试：当网络闪断、数据库倒换等场景造成DRS和数据库连接异常，会自动重试直到任务恢复。
  
  2. 具备断点续传能力：源数据库或目标数据库连接出现异常时，自动记录当前回放位点，等故障修复后，自动从上一次位点接续回放，保证同步数据的一致性。
  
  3. DRS迁移实例所在虚拟机故障，业务自动切换到新虚拟机并保证IP不变，保证迁移任务正常。
   
DRS使用的字符集标准是Unicode 6.2.0。
#### 实时迁移基本原理
图2实时迁移原理   
![](https://support.huaweicloud.com/productdesc-drs/figure/zh-cn_image_0000001445990020.png "点击放大")
- **以"全量** +**增量"迁移为例，完整的迁移分为四个阶段。**
  1. **第一阶段**：结构迁移。DRS服务会从源数据库查询到用户选择迁移的库、表、主键等对象，然后在目标数据库创建这些对象。
  
  2. **第二阶段**：全量数据迁移。DRS服务会通过并行技术，以最高效的资源利用，从源数据库查询到当前所有数据，并在目标数据库进行插入。在全量数据迁移启动前，会提前进行增量数据抽取保存，以便在第三阶段增量数据迁移时，能够和全量数据接续，保证数据的完整性和一致性。
  
  3. **第三阶段**：增量数据迁移。全量任务结束后，增量迁移任务启动，此时会从全量开始的增量数据持续的解析转换和回放，直到追平当前的增量数据。
  
  4. **第四阶段**：在迁移阶段，为了避免触发器、事件对数据操作造成干扰，在结束任务阶段再迁移触发器、事件。
   
- **全量数据迁移的底层模块主要原理：**
  - **分片模块：**通过优化的分片算法，计算每个表的分片逻辑。
  
  - **抽取模块：**根据计算的分片信息并行多任务从源数据库查询数据。
  
  - **回放模块**：将抽取模块查询的数据并行多任务插入目标数据库。
   
- **增量数据迁移的底层实现模块主要原理：**
  - **日志读取模块**：日志读取模块从源数据库读取原始增量日志数据（例如MySQL为binlog），经过解析转换为标准的日志格式存储在本地。
  
  - **日志回放模块**：日志回放模块根据日志读取模块转换的标准格式增量日志，根据用户的选择策略进行加工过滤，将增量数据同步到目标数据库。
   
 
#### 备份迁移基本原理
图3备份迁移原理   
![](https://support.huaweicloud.com/productdesc-drs/figure/zh-cn_image_0000001483684785.png "点击放大")
备份迁移实现SQLServer数据库的离线迁移功能。用户需要提前将源数据库的全量备份包和增量备份包上传到OBS桶中，DRS服务会从OBS桶中下载备份包并上传到目标数据库本地磁盘，在对文件完成预检查和校验后，执行导入命令将数据恢复到目标数据库。
#### 实时同步基本原理
图4实时同步原理   
![](https://support.huaweicloud.com/productdesc-drs/figure/zh-cn_image_0000001495831089.png "点击放大")
实时同步功能实现源数据库和目标数据库的数据长期同步，主要用于OLTP到OLAP、OLTP到大数据组件的数据实时同步。全量和增量的数据同步和实时迁移的技术原理基本一致，但是基于不同的业务使用场景，两个功能还是有些差异。
1. 实时同步支持异构数据库，针对异构数据库结构同步，DRS服务会通过语法转换，将源数据库的结构定义语句转换为目标库的结构定义语句，在目标数据库执行，同时数据库字段类型也会进行映射转换。可以参考各异构链路的[数据类型映射关系](https://support.huaweicloud.com/productdesc-drs/drs_08_0002.html)，也可以使用UGO服务进行异构链路的结构同步。
2. 实时同步会提供更多的数据加工规则可供用户在数据同步时使用，这些规则会在数据抽取、解析、回放阶段进行处理，最终满足用户需要的各种数据同步规则。
3. 实时同步不会同步触发器、事件等对象。
4. 实时同步经常用于多个源数据库到一个目标数据库的数据同步，对于多对一、一对多场景的DDL操作有专门的处理。
 
#### 数据订阅基本原理
图5数据订阅原理   
![](https://support.huaweicloud.com/productdesc-drs/figure/zh-cn_image_0000001483804949.png "点击放大")
数据订阅功能提供SDK使得客户业务程序可以实时获取源数据库的数据增量变更。
DRS服务从源数据库抽取原始增量日志，解析为标准格式并持久化保存到本地，同时实时调用客户端订阅SDK的notify接口，推送增量变更数据到客户端业务程序，客户端根据业务需求实现具体消费逻辑。
当客户端程序消费的变更数据会实时记录在服务器端，异常中断、重连等场景下，DRS服务端会从最后的消费位点继续推送增量变更数据。
#### 实时灾备基本原理
实时灾备的功能是通过实时复制技术实现两个数据库的数据容灾，底层技术原理和实时迁移是一致的，差异点主要是实时灾备支持正向数据同步和反向数据同步，且实时灾备为实例级别灾备，不支持选择库表。
#### 录制回放基本原理
录制回放主要分为录制、回放两个阶段，录制过程是从源数据库上将所需时间段内的全部SQL原语句（包括增、删、改、查）通过审计日志/全量SQL下载、录制工具等进行采集，以文件形式缓存起来，并往目标数据库注入模拟数据，等待用户执行回放。用户可以在DRS任务上手工触发回放，观察目标数据库的性能表现。也可以通过控制DRS录制回放的线程及回放速度，来模拟源业务流量放大的效果，从而分析目标数据库对于未来业务激增时的稳定性表现。
