如果您的Spring Cloud集群(包含多个应用)已经部署在阿里云上,那么本文档将向您介绍如何将集群及集群中的所有应用平滑迁移到EDAS中,并实现基本的服务注册与发现。如果您的Spring Cloud集群还未部署到阿里云,请联系EDAS技术支持人员为您提供完整的上云及迁移到EDAS方案。
迁移到EDAS的价值
为应用部署提供了启动参数灵活配置、流程可视化、服务优雅上下线和分批发布等功能,让您的应用发布可配、可查、可控。
提供了服务发现与配置管理功能,您无需再自行运维Eureka、ZooKeeper、Consul等中间件组件,可以直接使用EDAS提供的商业版服务发现与配置管理。
提供了统一的服务治理,目前支持查询发布和消费的服务详情。
提供了动态扩、缩容功能,可以根据流量高峰和低谷实时地为您的应用扩容和缩容。
提供了高级监控功能,除了支持基本的实例信息查询外,还支持微服务调用链查询、系统调用拓扑图、慢SQL查询等高级监控功能。
提供限流降级功能,保证您的应用高可用。
提供了全链路灰度功能,满足您的应用在迭代、更新时通过灰度进行小规模验证的需求。
什么是平滑迁移
如果您的Spring Cloud应用集群及应用已经部署到生产环境并处于正常运行状态中,此时想将集群迁移到EDAS享受完整的EDAS功能,那么在迁移过程中,保证业务的平稳运行不中断是第一要务,而保证应用平台运行不中断迁移到EDAS即为平滑迁移。
如果您的集群尚未在生产环境中运行,或者您可以接受停机迁移,则没必要按照本文进行平滑迁移,可直接将应用在本地开发完再部署到EDAS,请参见实现服务注册与发现。
迁移流程
下图是一个比较典型的应用架构,根据迁移的先后顺序需要将迁移流程分为三步。
(必选)迁移应用
迁移的应用一般都是无状态的,所以这一步是可以先进行。同时,本文将重点介绍如何迁移应用。
(可选)迁移SLB或修改域名配置
在应用迁移完成后,您还需要迁移SLB或修改域名配置。
可选:迁移存储和消息队列
如果应用已经部署在阿里云,存储和消息队列也使用阿里云相关产品(例如RDS、MQ等),则应用迁移完成后,之前的存储和消息队列无需迁移。
如果应用未部署在阿里云,请加入钉群(钉群号:31723701)联系产品技术专家为您提供完整的上云及迁移到EDAS方案。
本文将主要介绍如何迁移应用。如果您想通过一个Demo快速体验平滑迁移的过程,可下载Demo,按照Readme运行一个迁移的样例。
迁移方案
迁移应用有两种方案,切流迁移、双注册和双订阅迁移方案。这两种方案都可以保证您的应用正常运行不中断的完成迁移。
本文将主要介绍如何使用双注册和双订阅方案迁移应用。
切流迁移方案
使用Spring Cloud Alibaba将原有的服务注册中心切换到Nacos。开发一套新的应用部署到EDAS,最后通过SLB和域名配置来进行切流。
如果您选择此方案进行开发应用,则不需要再阅读迁移应用的后续内容,请参见实现服务注册与发现。
双注册和双订阅迁移方案
双注册和双订阅迁移方案是指在应用迁移时同时接入两个注册中心(原有注册中心和EDAS注册中心)以保证已迁移的应用和未迁移的应用之间的相互调用。
通过双注册和双订阅平滑迁移应用的架构图如下:
已迁移的应用和未迁移的应用可以互相发现,从而实现互相调用,保证了业务的连续性。
使用方式简单,只需要添加依赖,修改一行代码,就可以实现双注册和双订阅。
支持查看消费者服务调用列表的详情,实时地查看到迁移的进度。
支持在不重启应用的情况下,动态地变更服务注册的策略和服务订阅的策略,只需要重启一次应用就可以完成迁移。
迁移第一个应用
选择最先迁移的应用。
建议是从最下层Provider开始迁移。但如果调用链路太复杂,比较难分析,也可以任意选一个应用进行迁移。选择完成后,即可参考下面的迁移步骤迁移第一个应用。Demo的样例程序,请参见Demo。
在应用程序中添加依赖并修改配置。
为了能将您原来的应用托管到EDAS中,您需要在您的应用程序中添加相关依赖并修改配置。
在
pom.xml
文件中添加spring-cloud-starter-alibaba-nacos-discovery
依赖。<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>{相应的版本}</version> </dependency>
在
application.properties
中添加nacos-server的地址,并关闭Nacos的RibbonServerList
。spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 ribbon.nacos.enabled = false
默认情况下Spring Cloud只支持在依赖中引入一个注册中心,当存在多个注册中心时,启动会报错。所以这里需要添加一个依赖
edas-sc-migration-starter
,使Spring Cloud应用支持多注册。<dependency> <groupId>com.alibaba.edas</groupId> <artifactId>edas-sc-migration-starter</artifactId> <version>1.0.5</version> </dependency>
Ribbon是实现负载均衡的组件,为了使应用可以支持从多个注册中心订阅服务,需要修改Ribbon配置。在应用启动的主类中,将RibbonClients默认配置为
MigrationRibbonConfiguration
。假设原有的应用主类启动代码如下:
@SpringBootApplication public class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } }
那么修改后的应用主类启动代码如下:
@SpringBootApplication @RibbonClients(defaultConfiguration = MigrationRibbonConfiguration.class) public class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } }
说明本地修改应用或者应用部署到EDAS后,如果对应用有其它控制需求(如注册到哪些注册中心或从哪些注册中心订阅),可以通过Spring Cloud Config或Nacos Config进行动态的配置调整,无需重启应用,请参见动态调整服务注册和订阅方式。
不过,这两种方式都需要在应用中添加配置管理依赖和修改配置的操作,使用Spring Cloud Config请参考开源文档,使用Nacos Config,请参见实现配置管理。
将修改后的应用部署到EDAS中。
您可以根据您的实际需求将应用部署到ECS集群或容器服务Kubernetes集群中,在部署时也可以选择通过控制台、工具等方式进行部署。相关内容,请参见创建和部署应用概述(K8s)和应用创建和部署概述(ECS)。
为了帮助您节约成本,建议您继续使用之前ECS,但需要将ECS导入到EDAS中。具体操作,请参见使用控制台创建ECS集群。
如果需要创建新的ECS、集群等资源,请确保在原有VPC内创建,以保证迁移前后的应用网络互通,顺利完成迁移。具体操作,请参见ECS资源管理概述。
在数据库、缓存、消息队列等产品中为新ECS配置IP白名单等,确保应用依赖的这些第三方组件可以正常访问。
结果验证。
最重要的是观察业务本身是否正常。
查看服务订阅监控。
如果您的应用开启了Spring Boot Actuator监控,那么可以访问Actuator查看此应用订阅的各服务的RibbonServerList的信息。Actuator地址如下:
Spring Boot 1.x版本:http://ip:port/migration_server_list
Spring Boot 2.x版本:http://ip:port/actuator/migration-server-list
metaInfo中的serverGroup字段代表了此节点来源于哪个服务注册中心。
迁移其它所有应用
依照迁移第一个应用的迁移步骤,依次将所有应用迁移到EDAS。
清理迁移配置
迁移完成后,删除原有的注册中心的配置和迁移过程专用的依赖edas-sc-migration-starter
,在业务量较小的时间分批重启应用。
edas-sc-migration-starter
是一个迁移专用的starter,虽然长期使用对您业务的稳定性没有影响,但在Ribbon负载均衡实现方面有一定的局限性,推荐您在迁移完毕后清理掉,然后在业务量较小的时间分批重启应用。
动态调整服务注册和订阅方式
在完成迁移过程中,您可以通过EDAS配置管理功能动态变更服务注册和订阅方式。
动态调整服务订阅
默认的订阅策略是从所有注册中心订阅,并对数据做一些简单的聚合。
您可以通过EDAS的配置管理来修改
spring.cloud.edas.migration.subscribes
属性以便选择从哪几个注册中心订阅数据。spring.cloud.edas.migration.subscribes=nacos,eureka # 同时从Eureka和Nacos订阅服务 spring.cloud.edas.migration.subscribes=nacos # 只从Nacos订阅服务
动态变更服务注册
默认的注册策略是注册到所有注册中心。
您可以通过EDAS的配置管理来调整服务注册中心。
您可以通过
spring.cloud.edas.migration.registry.excludes
属性来关闭指定的注册中心。spring.cloud.edas.migration.registry.excludes= #默认值为空,注册到所有的服务注册中心 spring.cloud.edas.migration.registry.excludes=eureka #关闭Eureka的注册 spring.cloud.edas.migration.registry.excludes=nacos,eureka #关闭Nacos和Eureka的注册
如果您想在应用运行时动态修改注册到哪些注册中心,直接使用Spring Cloud配置管理功能在运行时修改此属性即可。
迁移问题咨询
如果您在迁移Spring Cloud集群至EDAS的过程中遇到异常问题,请加入钉群(钉群号:31723701)联系产品技术专家咨询处理。
为了方便为您提供服务,请在申请加入钉钉群时备注公司名和阿里云账号。