如果您的Dubbo应用已经部署到生产环境并处于正常运行状态中,此时想将应用迁移到EDAS享受完整的EDAS功能,那么在迁移过程中,保证业务的平稳运行不中断是第一要务,而保证应用平台运行不中断迁移到EDAS即为平滑迁移。本文介绍如何将应用平滑迁移到EDAS中,并实现基本的服务注册与发现。

前提条件

已将Dubbo应用部署至阿里云。

说明
  • 如果您的Dubbo应用还未部署到阿里云,请加入钉群(钉群号:31723701)联系产品技术专家为您提供完整的上云及迁移到EDAS方案。
  • 如果您的应用尚未在生产环境中运行,或者您可以接受停机迁移,则无需按照本文进行平滑迁移,可直接将应用在本地开发完再部署到EDAS。具体操作,请参见开始使用EDAS

迁移到EDAS的优势

功能 描述
应用部署 启动参数灵活配置、流程可视化、服务优雅上下线和分批发布等功能,让您的应用发布可配、可查、可控。
服务发现与配置管理 您无需再自行运维Eureka、ZooKeeper、Consul等中间件组件,可直接使用EDAS提供的商业版服务发现与配置管理的功能。
服务治理 目前支持查询发布和消费的服务详情。
动态扩缩容 您可根据流量高峰和低谷实时地为您的应用扩容和缩容。
高级监控 除了支持基本的实例信息查询外,EDAS还支持微服务调用链查询、系统调用拓扑图、慢SQL查询等高级监控功能。
限流降级 限流降级功能保证您的应用高可用。
全链路灰度 全链路灰度功能满足您的应用在迭代、更新时通过灰度进行小规模验证的需求。

迁移流程

  1. (必选)迁移应用

    迁移的应用一般都是无状态的,所以这一步是可以先进行。同时,本文将重点介绍如何迁移应用。

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

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

    • SLB
      • 如果您的应用在迁移之前已经使用SLB,在应用迁移后,可以复用该SLB。
      • 如果您的应用在迁移之前没有使用SLB,建议您在迁移完入口应用(如上图所示的API Gateway)后,为该应用创建并绑定一个新的SLB。
    • 域名
      • 如果迁移后的应用可以复用SLB,域名配置也无需修改。
      • 如果迁移后的应用需要创建新的SLB并绑定到应用,则需要在域名中添加新的SLB配置,并删除原来不再使用的SLB,请参见域名DNS修改
  3. 可选:迁移存储和消息队列
    • 如果应用已经部署在阿里云,存储和消息队列也使用阿里云相关产品(例如RDS、MQ等),则应用迁移完成后,之前的存储和消息队列无需迁移。
    • 如果应用未部署在阿里云,请加入钉群(钉群号:31723701)联系产品技术专家为您提供完整的上云及迁移到EDAS方案。

本文将主要介绍如何迁移应用。如果您想通过一个Demo快速体验平滑迁移的过程,可下载Demo,按照Readme运行一个迁移的样例。

迁移方案

迁移应用有以下两种方案,这两种方案都可以保证您的应用正常运行且不中断的完成迁移。

切流迁移方案

使用Dubbo将原有的服务注册中心切换到EDAS ConfigServer,开发一套新的应用部署到EDAS,最后通过SLB和域名配置来切流。

如果您选择此方案,无需再阅读迁移应用的后续内容,可直接使用Spring Boot开发Dubbo微服务应用。具体操作,请参见使用Spring Boot开发Dubbo微服务应用

双注册和双订阅迁移方案

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

  1. 初始状态
  2. 第一步
  3. 第二步
  4. 第三步第三步
  5. 第四步第四步

通过双注册和双订阅平滑迁移应用的优点:

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

迁移第一个应用

选择最先迁移的应用时,建议从最下层Provider开始迁移。但如果调用链路太复杂,比较难分析,也可以任意选一个应用进行迁移。选择完成后,即可参考下面的迁移步骤迁移第一个应用。

  1. 在应用程序中添加依赖并修改配置(双注册、双订阅)。
    为了能将您原来的应用托管到EDAS中,您需要在您的应用程序中添加相关依赖并修改配置。
    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中添加注册中心的地址。
      dubbo.registry.address = edas-migration://30.5.XX.XX:9999?service-registry=edas://127.0.0.1:8080,zookeeper://172.31.XX.XX:2181&reference-registry=zookeeper://172.31.XX.XX:2181&config-address=127.0.0.1:8848             

      如果是非Spring Boot应用,在dubbo.properties或者对应的Spring配置文件中配置。

      参数 说明
      edas-migration://30.5.XX.XX:9999

      多注册中心的头部可以不做更改。启动时,Dubbo会对IP和端口做校验,如果日志级别为WARN及以下,可能会抛一个WARN的日志,可以忽略。

      service-registry

      服务注册的注册中心地址,默认会进行多注册,写入多个注册中心地址。每个注册中心都是标准的Dubbo注册中心格式,多个注册中心之间用英文半角逗号(,)分隔。其中ZooKeeper的地址172.31.XX.XX为示例,请使用真实的ZooKeeper地址和端口。

      reference-registry

      服务订阅的注册中心地址,支持多注册或者先注册到旧版注册中心。每个注册中心都是标准的Dubbo注册中心格式;多个用英文半角逗号(,)分隔。

      config-address

      动态推送的地址。EDAS会对该地址进行转换。

    3. 对于非Spring Boot的Spring应用,将com.alibaba.edas.dubbo.migration.controller.EdasDubboRegistryRest加入到您的扫描路径里。
  2. 本地验证。
    如果只想进行一次修改,可以使用动态配置的方式。
    1. 准备工作。
    2. 检查服务是否成功注册。
      • 登录轻量配置中心,在服务提供者列表中查看对应的服务。
      • 登录ZooKeeper,查看服务注册和消费信息。
    3. (可选)登录Nacos,配置对应的服务注册信息。
      说明 如果无需动态配置,可以跳过此步骤。
      • DataIddubbo.registry.config
      • Group:对应Dubbo应用的名称,applicationName,例如dubbo-migration-demo-server。配置信息是应用维度,所以应用名不能重复。
      • 配置内容:包含两种,一种是应用级别,一种是针对实例的IP级别(多张网卡可能出现问题)。
        • 应用级别
          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级别
          169.254.XX.XX.dubbo.reference.registry=edas://127.0.0.1:8080,zookeeper:127.0.0.1:2181
          169.254.XX.XX.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
  3. 将修改后的应用部署到EDAS中。
    您可以根据您的实际需求将应用部署到ECS集群或容器服务Kubernetes集群中,在部署时也可以选择通过控制台、工具等方式进行部署。相关内容,请参见应用创建和部署概述(ECS)创建和部署应用概述(K8s)
    • 为了节约成本,建议您继续使用之前ECS,但需要将ECS导入到EDAS中。具体操作,请参见使用控制台创建ECS集群
      重要 在导入ECS的时候如果提示需要转化后导入,请对重要的数据做好备份,避免数据丢失影响业务正常运行。
    • 如果需要创建新的ECS、集群等资源,请确保在原有VPC内创建,以保证迁移前后的应用网络互通,顺利完成迁移。具体操作,请参见ECS资源管理概述
    • 在数据库、缓存、消息队列等产品中为新ECS配置IP白名单等,确保应用依赖的这些第三方组件可以正常访问。
  4. 结果验证。
    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.**表示生效的注册中心信息。

迁移其它所有应用

参照迁移第一个应用的步骤,依次将所有应用迁移到EDAS。

清理迁移配置

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

修改对应的注册中心地址,即将ZooKeeper的配置删除,保证Consumer只从EDAS订阅,Provider只在EDAS订阅。有以下两种方式:

  • 方式一:动态配置

    关于配置修改,请参见本地验证

  • 方式二:手动修改

    当所有的应用都修改完成之后,修改应用的注册中心地址,将订阅的地址改为EDAS ConfigServer。

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

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

    说明

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

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

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