将Dubbo应用平滑迁移至SAE

如果您的Dubbo应用已经部署在阿里云上,您可以将应用迁移至Serverless 应用引擎 SAE(Serverless App Engine)。本文介绍如何将应用平滑迁移到SAE

背景信息

应用迁移概述

步骤一:迁移第一个应用

本文以Demo应用演示平滑迁移。关于Demo应用的下载地址,请参见Demo

  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.XX.XX:9999?service-registry=edas://127.0.XX.XX:8080,zookeeper://192.168.XX.XX:2181&reference-registry=zookeeper://192.168.XX.XX:2181&config-address=127.0.XX.XX:8848      
      重要 如果是非Spring Boot应用,您需要在dubbo.properties或者对应的Spring配置文件中进行设置。
      参数说明
      edas-migration://192.168.XX.XX:9999多注册中心的头部可以不做修改,启动的时候,因为Dubbo会对IP和端口进行校验,如果您的日志级别为WARN及以下,您可能会收到WARN的日志,请忽略该日志。
      service-registry服务的注册中心地址,支持服务的多注册中心,可以注入多个注册中心地址。每个注册中心均采用标准的Dubbo注册中心格式;多个用,分隔。示例中192.168.XX.XX为ZooKeeper地址,请使用真实的ZooKeeper地址和端口。
      reference-registry服务订阅的注册中心地址,支持多注册或者注册到未迁移前的注册中心。
      config-address动态推送的地址。
    3. 其他修改。
      对于非Spring Boot的Spring应用,需要将com.alibaba.edas.dubbo.migration.controller.EdasDubboRegistryRest添加到您的扫描路径中。
  3. 本地验证。
    此处以动态配置的方式为例。
    1. 验证准备。验证前,请确保您已完成以下操作:
    2. 检查服务是否成功注册。
      • 登录轻量配置中心,在服务提供者列表中查看对应的服务。
      • 登录ZooKeeper,查看服务注册和消费信息。
    3. 可选:登录Nacos,配置服务注册信息。
      说明 如果无需动态配置,可以跳过此步骤。
      参数说明
      DataId设置为dubbo.registry.config
      Group设置对应Dubbo应用的名称applicationName,如dubbo-migration-demo-server。配置信息是应用维度,所以应用名不能重复。
      配置内容
      • 应用级别
        dubbo.reference.registry=edas://127.0.XX.XX:8080   # 注册服务的注册中心地址。
        dubbo.service.registry=edas://127.0.XX.XX:8080,zookeeper:127.0.XX.XX:2181   # 订阅服务的注册中心地址。
      • 实例IP级别
        192.168.XX.XX.dubbo.reference.registry=edas://127.0.XX.XX:8080,zookeeper:127.0.XX.XX:2181
        192.168.XX.XX.dubbo.service.registry=edas://127.0.XX.XX:8080

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

    4. 查看迁移后应用调用是否正常,查看注册中心的注册订阅关系。
      • Spring Boot 1.x版本:http://ip:port/dubboRegistry
      • Spring Boot 2.x版本:http://ip:port/actuator/dubboRegistry
      Dubbo应用迁移1
  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应用迁移2
      参数说明如下。
      • dubbo.orig.**:应用中配置的注册中心信息。
      • dubbo.orig.**:生效的注册中心信息。

步骤二:迁移其他所有应用

依次将所有应用迁移到SAE。具体步骤,请参见步骤一:迁移第一个应用

步骤三:清理迁移配置

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

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

  • 方式一:动态配置。具体步骤,请参见本地验证
  • 方式二:手动修改。

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

    dubbo.registry.address = edas-migration://192.168.XX.XX:9999?service-registry=edas://127.0.XX.XX:8080,zookeeper://192.168.XX.XX:2181&reference-registry=edas://127.0.XX.XX:8080&config-address=127.0.XX.XX:8848

    reference-registry的值从zookeeper://192.168.XX.XX:2181改为edas://127.0.XX.XX:8080。修改完成后,即可部署应用。

    说明

    当应用迁移完成后,如果不再使用ZooKeeper,需要从注册中心配置中删除zookeeper://192.168.XX.XX:2181

    长期使用旧的ZooKeeper不影响业务的稳定性,但会增加Dubbo使用注册中心的复杂性,继而导致出错率上升。推荐您在迁移完毕后,及时清理旧的ZooKeeper,并在业务量较小的时间分批重启应用。最终示例地址如下。

    dubbo.registry.address = edas://127.0.XX.XX:8080