博主介绍:✌全网粉丝4W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战、定制、远程,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌

博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+MySQL+Vue等前后端分离项目,可以在左边的分类专栏找到更多项目。《Uniapp项目案例》有几个有uniapp教程,企业实战开发。《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源码解读、热门面试题、架构设计等。除此之外还有不少文章等你来细细品味,更多惊喜等着你哦

🍅开源项目免费哦:点击这里克隆或者下载 ,已经发布Vue3版   🍅

🍅文末获取联系🍅精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟

 Java项目案例《100套》

https://blog.csdn.net/qq_57756904/category_12173599.html

 uniapp小程序《100套》

https://blog.csdn.net/qq_57756904/category_12199600.html

目录

一、本方案特点

二、多注册和聚合订阅平滑迁移架构

三、迁移步骤

第一步,支持多注册和多订阅

1、修改 pom.xml,添加 spring-cloud-starter-alibaba-nacos-discovery 依赖:

2、支持多注册

4、将修改后的应用打包,并部署

5、验证迁移是否成功

6、完成应用迁移

第二步,迁移所有应用。

第三步,删除原有配置中心信息,完成迁移。

四、风险点和回滚

五·、其他问题

如何选择最先迁移哪个应用

💖微服务实战


一、本方案特点

  1. 迁移的过程中,业务不受任何影响。
  2. 迁移的过程中,不增加机器成本。

二、多注册和聚合订阅平滑迁移架构

通过多注册和聚合订阅平滑迁移到 Nacos 的架构图如下:

 

  • 通过引入 edas-sc-migration-starter 使得 Spring Cloud 应用支持多注册,这样确保原有系统的应用可以调用 注册到 Nacos 中的服务。
  • 通过引入 edas-sc-migration-starter 并配置 RibbonClients Configuration 支持聚合订阅,使得迁移到 Nacos中的应用可以调用原有系统的服务。
  • 迁移过程中,支持通过配置中心动态地修改订阅策略,支持通过 Endpoint 监控聚合订阅的详情,做到可配置可监控。

三、迁移步骤

第一步,支持多注册和多订阅

1、修改 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 的地址:

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

2、支持多注册

默认情况下 Spring Cloud 只支持在依赖中引入一个注册中心,当存在多个注册中心时,启动会报错。所以这里        需要添加一个依赖 edas-sc-migration-starter ,使得 Spring Cloud 应用支持多注册。

<dependency>
 	<groupId>com.alibaba.edas</groupId>
 	<artifactId>edas-sc-migration-starter</artifactId>
 	<version>1.0.1</version>
 </dependency>

3、修改 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);
     }
 }


注意,默认的订阅策略是从所有注册中心订阅,并对数据做一些简单的聚合。
您可以通过 spring.cloud.edas.migration.subscribes 属性来选择从哪几个注册中心订阅数据。

spring.cloud.edas.migration.subscribes=nacos,eureka # 同时从 Eureka 和 Nacos 订阅服务
 
 spring.cloud.edas.migration.subscribes=nacos        # 只从 Nacos 订阅服务


如果想在应用运行时动态修改从哪些注册中心订阅数据,直接使用 Spring Cloud 配置管理功能在运行时修改此属性即可。

4、将修改后的应用打包,并部署

5、验证迁移是否成功

  1. 最重要的一点,观察业务本身是否正常。
  2. 如果您的应用开启了 Actuator 监控,那么可以通过 Actuator 来查看此应用订阅的各服务的 RibbonServerList 的信息。metaInfo 中的 serverGroup 字段 代表了此节点来源于哪个服务注册中心。
http://ip:port/migration_server_list             ## Spring Boot 1.x 版本

 http://ip:port/actuator/migration-server-list    ## Spring Boot 2.x 版本

6、完成应用迁移

第二步,迁移所有应用。

  1. 如果按照第一步中的步骤完整地迁移完一个应用,且各项数据都显示业务正常,则可以开始迁移剩余应用。

第三步,删除原有配置中心信息,完成迁移。

当应用都已经迁移到 Nacos 之后,此时可以删除原有的注册中心的配置 和 迁移过程专用的依赖 edas-sc-migration-starter ,完成整个迁移。

  1. 从 pom.xml 中删除原有的注册中心的依赖 和 edas-sc-migration-starter
  2. 参考第一步中第2小步骤中的部署方式,将修改后的应用依次全部重新部署。
  3. 停止原有的 Eureka 集群。

四、风险点和回滚

从目前方案的设计中,没有发现明显的风险点。但是因为在迁移的过程中涉及到所有应用的两次修改和重启,所以建议在迁移的过程中实时关注业务数据监控的详情,确保完全不影响业务的情况下再进行下一步操作。

如果遇到异常情况,针对于不同阶段的处理方案如下:

  1. 执行第一步的过程中出现业务异常。还原代码,重新部署到原有机器,恢复业务。查清楚具体问题,排查完毕后再重新执行。主要排查是否是机器权限的问题。
  2. 执行第二步的过程中出现业务异常。还原正在迁移的应用的代码,重新部署到原有机器,恢复业务。查清楚具体问题,排查完毕后再重新执行。主要排查是否是机器权限的问题。
  3. 执行第三步的过程中出现业务异常。还原正在迁移的应用的代码,重新部署到原有机器,恢复业务。

五·、其他问题

如何选择最先迁移哪个应用

  • 建议是从最下层 Provider 开始迁移。但如果调用链路太复杂,比较难分析,所以设计的方案中是支持随便找一个非流量入口应用进行迁移。
  • 因为流量入口的应用比较特殊,所以建议迁移流量入口应用时需要根据自己应用的实际情况考虑迁移方案。

💖微服务实战

【微服务】SpringCloud的OpenFeign与Ribbon配置

集Oauth2+Jwt实现单点登录

Spring Cloud Alibaba微服务第29章之Rancher

Spring Cloud Alibaba微服务第27章之Jenkins

Spring Cloud Alibaba微服务第24章之Docker部署

Spring Cloud Alibaba微服务第23章之Oauth2授权码模式

Spring Cloud Alibaba微服务第22章之Oauth2

Spring Cloud Alibaba微服务第21章之分布式事务

Spring Cloud Alibaba微服务第18章之消息服务

Spring Cloud Alibaba微服务第16章之服务容错

Spring Cloud Alibaba微服务第14章之分库分表

Spring Cloud Alibaba微服务第11章之MyBatis-plus

Spring Cloud Alibaba微服务第8章之OpenFeign

Spring Cloud Alibaba微服务第7章之负载均衡Ribbon

SpringCloud Alibaba微服务第6章之Gateway

SpringCloud Alibaba微服务第4章之Nacos

SpringCloud Alibaba微服务开篇

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐