如果您的Dubbo应用已经部署在阿里云上,您可以将应用迁移至SAE。本文说明了如何将应用平滑迁移到SAE中,以及实现基本的服务注册与发现。如果您的Dubbo应用尚未部署至阿里云,请提交工单或联系SAE技术支持人员获取完整的上云及迁移方案。

迁移流程

迁移流程
  1. (必选)迁移应用

    迁移的应用通常是无状态的,需要先进行应用迁移。

  2. (可选)迁移SLB或修改域名配置

    在应用迁移完成后,您还需要迁移SLB或修改域名配置。

    • SLB
      • 如果您的应用在迁移之前已经使用SLB,应用迁移后可以复用该SLB。您可以根据您的实际需求选择绑定SLB的策略,详情请参见为应用绑定SLB
      • 如果您的应用在迁移之前没有使用SLB,建议在迁移完入口应用(如流程图中所示的API Gateway)后,为该应用创建并绑定一个新SLB。
      • 迁移方案中,推荐使用双注册和双订阅方案,以节约ECS成本。如果由于某种原因(例如原ECS端口被占用)不能复用原ECS,那么需要采用切流迁移方案,添加新的ECS用于应用迁移。在应用迁移完成后,依据迁移前应用是否使用SLB,选择复用SLB或创建SLB并绑定到迁移后应用。
    • 域名
      • 如果迁移后的应用可以复用SLB,则域名配置无需修改。
      • 如果迁移后的应用需要创建新的SLB并绑定,则需要在域名中添加新的SLB配置,详情请参见域名DNS修改,并删除原来不再使用的SLB。
  3. (可选)迁移存储和消息队列
    • 如果应用迁移前已经部署在阿里云上,同时存储和消息队列同样使用了阿里云相关产品(如RDS、MQ等),那么应用迁移完成后,迁移前的存储和消息队列无需迁移。
    • 如果应用迁移前没有部署在阿里云上,请提交工单或联系SAE技术支持人员为您提供完整的上云及迁移到方案。

本文以Demo应用演示平滑迁移。Demo下载:Demo

迁移方案

迁移应用有两种方案,切流迁移、双注册和双订阅迁移方案。两种方案均可保证应用正常运行不中断情况下完成平滑迁移。
说明 本文将主要介绍双注册和双订阅方案。
  • 切流迁移方案

    使用Dubbo将原有的服务注册中心同步到SAE ConfigServer,开发全新的应用部署到SAE,通过SLB和域名配置进行切流。

    如果选择此方案,则参见将Dubbo应用托管到SAE

  • 双注册和双订阅迁移方案

    双注册和双订阅迁移方案指在应用迁移时同时接入两个注册中心(原有注册中心和SAE注册中心),以保证已迁移的应用和未迁移的应用之间可相互调用。

    双注册和双订阅平滑迁移方案架构图如下:双注册和双订阅平滑迁移方案架构图
    • 已迁移的应用和未迁移的应用之间可以互相发现,从而实现互相调用,保证了业务的连续性。
    • 使用方式简单,仅需要添加依赖,并修改极少代码,实现双注册和双订阅。
    • 支持查看消费者服务调用列表的详情,实时地查看到迁移的进度。
    • 支持在不重启应用的情况下,动态地变更服务注册的策略和服务订阅的策略,只需要重启一次应用就可以完成迁移。

迁移第一个应用

  1. 制定应用迁移优先级。
    选择迁移需求优先级高的应用,建议从最下层Provider开始迁移。如果调用链路太复杂难分析,可以任意选一应用进行迁移。
  2. 添加应用依赖及注册中心。
    在应用程序中添加依赖并修改配置 (双注册、双订阅)。
    1. pom.xml文件中添加edas-dubbo-migration-bom依赖。
      <dependency>
          <groupId>com.alibaba.edas</groupId>
          <artifactId>edas-dubbo-migration-bom</artifactId>
          <version>2.6.5.1</version>
          <type>pom</type>
      </dependency>                            
    2. application.properties中添加SAE注册中心的IP地址。
      dubbo.registry.address = edas-migration://192.168.124.15:9999?service-registry=edas://127.0.0.1:8080,zookeeper://192.168.20.219:2181&reference-registry=zookeeper://192.168.20.219:2181&config-address=127.0.0.1:8848      
      说明 如果是非Spring Boot应用,在dubbo.properties或者对应的Spring配置文件中进行设置。
      • edas-migration://192.168.124.15:9999

        多注册中心的头部可以不做修改,启动的时候,如果日志级别是为WARN及以下,系统可能会上报WARN的日志,因为Dubbo会对IP和端口进行校验,请忽略该日志。

      • service-registry是服务的注册中心地址,支持服务的多注册中心,可以注入多个注册中心地址。每个注册中心均采用标准的Dubbo注册中心格式;多个用,分隔。 示例中192.168.20.219为ZooKeeper地址,现场配置时请使用真实地址和端口。
      • reference-registry是服务订阅的注册中心地址,支持多注册或者注册到未迁移前的注册中心。
      • config-address是动态推送的地址。
    3. 其他修改。
      对于非Spring Boot的Spring应用,需要将com.alibaba.edas.dubbo.migration.controller.EdasDubboRegistryRest添加到您的扫描路径中。
  3. 本地验证。
    此处以动态配置的方式为例。
    1. 验证准备。
    2. 检查服务是否成功注册。
      • 登录轻量配置中心,在服务提供者列表中查看对应的服务。
      • 登录ZooKeeper,查看服务注册和消费信息。
    3. (可选) 登录Nacos,配置服务注册信息。
      说明 如果不需要动态配置的话,无需执行此步骤。
      表 1. 配置服务注册信息
      参数 配置及操作
      DataId 设置为dubbo.registry.config
      Group 设置对应Dubbo应用的名称applicationName,如dubbo-migration-demo-server。 配置信息是应用维度,所以应用名不能重复。
      配置内容
      • 应用级别
        dubbo.reference.registry=edas://127.0.0.1:8080   ##注册服务的注册中心。
        dubbo.service.registry=edas://127.0.0.1:8080,zookeeper:127.0.0.1:2181   ##订阅服务的注册中心。
      • 实例IP级别
        192.168.15.86.dubbo.reference.registry=edas://127.0.0.1:8080,zookeeper:127.0.0.1:2181
        192.168.15.86.dubbo.service.registry=edas://127.0.0.1:8080                                               

      集群验证时建议先验证实例IP级别,再验证整个应用验证。

    4. 查看迁移后应用调用是否正常,查看注册中心的注册订阅关系。
      • Spring Boot 1.x版本:http://ip:port/dubboRegistry
      • Spring Boot 2.x版本:http://ip:port/actuator/dubboRegistry
      查看迁移后应用调用是否正常
  4. 将应用部署到SAE。
    根据实际需求将应用部署SAE,具体操作请参见部署应用概述
  5. 结果验证。
    1. 观察业务运行是否正常。
    2. 查看服务订阅监控。
      如果应用开启了Spring Boot Actuator监控功能,请访问Actuator查看此应用订阅的各服务的RibbonServerList信息。Actuator地址如下:
      • Spring Boot 1.x版本:http://ip:port/dubboRegistry
      • Spring Boot 2.x版本:http://ip:port/actuator/dubboRegistry
      查看服务订阅监控。

      dubbo.orig.**表示应用中配置的注册中心信息。

      dubbo.effective.**表示生效的注册中心信息。

迁移其他所有应用

依照迁移第一个应用,依次将所有应用迁移到SAE。

清理迁移配置

迁移完成后,删除原有的注册中心配置和迁移过程专用的依赖edas-dubbo-migration-bom

修改对应的注册中心地址(即删除ZooKeeper的配置),保证Consumer、Provider仅从SAE订阅。

  • 方式一:动态配置

    按照本地验证中的方法进行修改。

  • 方式二:手动修改

    所有的应用修改完成后,修改应用的注册中心地址,将订阅的地址改为SAE ConfigServer

    dubbo.registry.address = edas-migration://192.168.124.15:9999?service-registry=edas://127.0.0.1:8080,zookeeper://192.168.20.219:2181&reference-registry=edas://127.0.0.1:8080&config-address=127.0.0.1:8848
    reference-registryzookeeper://192.168.20.219:2181改为edas://127.0.0.1:8080。修改完成之后,即可部署应用。
    dubbo.registry.address = edas://127.0.0.1:8080                        
    说明 当应用迁移完成之后,如果不再使用ZooKeeper,需要从注册中心配置中删除zookeeper://192.168.20.219:2181

请在业务量较小的时间段分批重启应用。

问题反馈

如果您在使用 SAE 过程中有任何疑问,欢迎您扫描下面的二维码加入钉钉群进行反馈。问题反馈