
# 中间件层迁移方案
当前企业业务中使用比较多的中间件类型为缓存中间件和消息中间件。中间件作为数据存储的临时场所，数据一般不用迁移，但在切换时，为了确保源端和目的端数据的一致性，需要等中间件消息队列中的消息完成消费后再切换。如果中间件缓存数据是持久化的，即作为数据库使用，此场景需要进行数据的迁移。所以中间件的迁移方案需结合业务使用情况进行具体分析，下面将详细介绍各类中间件的迁移方案。
- **Redis迁移方案**

- **确定Redis使用场景**
  Redis使用场景主要有2种，将Redis用作缓存或者将Redis用作数据库。不同使用场景的Redis迁移方案不同，详见下表所示。
  表1Redis迁移场景 
  |      **Redis使用场景**       |                                                                     **迁移方式**                                                                     |
  |---|---|
  | Redis实例中的数据用作缓存          | 业务切换时，为防止Redis后端的数据库被击穿，可基于数据库性能判断使用哪种迁移方案： 方案1：不迁移，将Redis缓冲数据提前预热 方案2：使用Redis迁移方案迁移缓冲数据 |
  | Redis实例中的数据是持久化的，作为数据库使用 | 使用Redis迁移方案迁移持久化数据                                                                                                                               |
     
  

- **Redis迁移方案**
  表2Redis迁移方案 
  |   **迁移方案**    | **迁移方式** |                       **特点**                       |               **适用场景**                |
  |---|---|---|---|
  | DCS迁移工具（推荐）   | 全量+增量迁移  | 源端业务停机时间短、操作简单、支持在线实时同步增量                          | 适用于源端是自建Redis或其他云厂家Redis实例迁移至华为DCS的场景 |
  | RDB/AOF文件备份恢复 | 全量迁移     | 离线迁移，操作复杂，源端业务停机时间长，需要源端业务停机后制作RDB/AOF文件，不支持增量同步数据 | 所有                                    |
     
  

- **消息中间件迁移方案**

- **确定消息中间件的切换场景**
  表3消息中间件切换场景 
  |                         **适用产品**                         | **切换窗口** |                           **迁移方式**                           |
  |---|---|---|
  | Kafka ``` RabbitMQ ``` ``` RocketMQ ``` ``` ActiveMQ ``` | 切换时间窗充足  | 切换时间充足，业务评估在切换时间窗口内可以完成消息消费，此时，消息中间件中的数据不需要迁移，等待消费者将消息消费完成即可 |
  | Kafka ``` RabbitMQ ``` ``` RocketMQ ``` ``` ActiveMQ ``` | 切换时间窗有限  | 切换时间有限，业务评估在切换时间窗口内无法完成消息消费，请参考消息中间件迁移方案进行消息迁移               |
     
  

- **消息中间件迁移方案**
  表4消息中间件迁移方案 
  |      **迁移方案**       | **迁移方式** |                            **特点**                             |         **适用场景**          |
  |---|---|---|---|
  | 开源工具MirrorMaker 2.0 | 全量+增量    | 1.部署复杂，操作繁琐 2.支持消费队列offset偏移量的同步  | 所有                        |
  | 华为云SmratConnect工具   | 全量+增量    | 1.工具界面化，操作简单 2.支持消费队列offset偏移量的同步 | 适用于自建kafka或云服务迁移到华为云kafka |
     
  
 
