如果您的Spring Cloud集群(包含多个应用)已经部署在阿里云上,您可以将应用迁移至SAE。本文说明了如何将应用平滑迁移到SAE中,以及实现基本的服务注册与发现。如果您的Spring Cloud集群尚未部署至阿里云,请提交工单或联系SAE技术支持人员获取完整的上云及迁移方案。
迁移流程
- (必选)迁移应用
迁移的应用通常是无状态的,需要先进行应用迁移。
- (可选)迁移SLB或修改域名配置
在应用迁移完成后,您还需要迁移SLB或修改域名配置。
- SLB
- 如果您的应用在迁移之前已经使用SLB,应用迁移后可以复用该SLB。您可以根据您的实际需求选择绑定SLB的策略,详情请参见为应用绑定SLB。
- 如果您的应用在迁移之前没有使用SLB,建议在迁移完入口应用(如流程图中所示的API Gateway)后,为该应用创建并绑定一个新SLB。
- 迁移方案中,推荐使用双注册和双订阅方案,以节约ECS成本。如果由于某种原因(例如原ECS端口被占用)不能复用原ECS,那么需要采用切流迁移方案,添加新的ECS用于应用迁移。在应用迁移完成后,依据迁移前应用是否使用SLB,选择复用SLB或创建SLB并绑定到迁移后应用。
- 域名
- 如果迁移后的应用可以复用SLB,则域名配置无需修改。
- 如果迁移后的应用需要创建新的SLB并绑定,则需要在域名中添加新的SLB配置,详情请参见域名DNS修改,并删除原来不再使用的SLB。
- SLB
- (可选)迁移存储和消息队列
- 如果应用迁移前已经部署在阿里云上,同时存储和消息队列同样使用了阿里云相关产品(如RDS、MQ等),那么应用迁移完成后,迁移前的存储和消息队列无需迁移。
- 如果应用迁移前没有部署在阿里云上,请提交工单或联系SAE技术支持人员为您提供完整的上云及迁移到方案。
本文以Demo应用演示平滑迁移。Demo下载:Demo。
迁移方案
- 切流迁移方案
使用Spring Cloud Alibaba将原有的服务注册中心切换到Nacos。开发一套新的应用部署到SAE,最后通过SLB和域名配置来进行切流。
如果选择此方案,则参见将Spring Cloud应用托管到SAE。
- 双注册和双订阅迁移方案
双注册和双订阅迁移方案指在应用迁移时同时接入两个注册中心(原有注册中心和SAE注册中心),以保证已迁移的应用和未迁移的应用之间可相互调用。
双注册和双订阅平滑迁移方案架构图如下:- 已迁移的应用和未迁移的应用之间可以互相发现,从而实现互相调用,保证了业务的连续性。
- 使用方式简单,仅需要添加依赖,并修改极少代码,实现双注册和双订阅。
- 支持查看消费者服务调用列表的详情,实时地查看到迁移的进度。
- 支持在不重启应用的情况下,动态地变更服务注册的策略和服务订阅的策略,只需要重启一次应用就可以完成迁移。
迁移第一个应用
迁移其他所有应用
按照迁移第一个应用的步骤依次将所有应用迁移到SAE。
清理迁移配置
迁移完成后,删除原有的注册中心配置和迁移过程专用的依赖edas-sc-migration-starter
。
edas-sc-migration-starter
迁移专用的starter,长期使用对业务的稳定性没有影响,对于Ribbon负载均衡实现有一定的局限性,建议在迁移完毕后删除,并在业务量较小的时间段内进行分批重启应用。
- 动态调整服务注册和订阅方式
应用迁移过程中,可以通过SAE配置管理功能动态变更服务注册和订阅方式。
- 动态调整服务订阅
系统默认订阅策略是从所有注册中心订阅,并对数据进行聚合。
您可以通过SAE的配置管理修改spring.cloud.edas.migration.subscribes
属性,选择具体的注册中心订阅数据。spring.cloud.edas.migration.subscribes=nacos,eureka # 同时从Eureka和Nacos订阅服务 spring.cloud.edas.migration.subscribes=nacos # 只从Nacos订阅服务
- 动态变更服务注册
系统默认订阅策略是从所有注册中心订阅。
您可以通过 SAE 的配置管理来调整服务注册中心。
通过修改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配置管理功能在运行时修改此属性。