一、背景
spring cloud netfix家族进入维护状态,后续也不再迭代更新
1. 业务背景
为防止注册中心对后续业务扩展形成束缚并阻碍其发展,同时为了优化项目架构,选择将注册中心从eureka切换至nacos
2. 技术背景
2.1. edas-sc-migration-starter
nacos架构和原理: https://developer.aliyun.com/ebook/36/10664?spm=a2c6h.26392459.ebook-detail.4.31b934e23Shydn eureka平滑迁移nacos章节
《Nacos架构&原理》使用edas-sc-migration-starter
实现多注册和多订阅,通过两轮发布实现平滑迁移
2.2. nacos-sync
nacos-sync: https://nacos.io/zh-cn/docs/nacos-sync.html
NacosSync是一个支持多种注册中心的同步组件,通过nacos-sync
实现eureka和nacos的双向注册实现平滑迁移
三、方案描述
1. 方案1
1.1. 概述
- 通过引入 edas-sc-migration-starter 使得 Spring Cloud 应用支持多注册,这样确保原有系统 的应用可以调用 注册到 Nacos 中的服务。
- 通过引入 edas-sc-migration-starter 并配置 RibbonClients Configuration 支持聚合订阅,使得迁移到 Nacos 中的应用可以调用原有系统的服务。
- 迁移过程中,支持通过配置中心动态地修改订阅策略,支持通过 Endpoint 监控聚合订阅的详情,做到可配置可监控。
1.2. 详细说明
- 第一轮发布将所有服务双注册/订阅到nacos、eureka上
- 第二轮发布所有服务取消注册/订阅到eureka,仅在nacos注册/订阅
- 移除eureka server、config server、rabbitMQ
1.3. 方案优缺点
优点
- 影响面仅在服务之间
缺点
- 两轮发布存在一定工作量
- 迁移周期较长
- 长期不维护,自定义的健康检查端口在高版本spring有问题
2. 方案2
2.1. 概述
启动nacos-sync集群双向同步nacos和eureka服务列表
2.2. 详细说明
- 服务发布注册/订阅至nacos
- 移除eureka server、nacos-sync、config server、rabbitMQ
2.3. 方案优缺点
优点
- 一轮发布
- 专注于nacos升级
缺点
- 影响面在集群层面
四、上线流程
- 上线前检查配置文件是否新增修改,如果有需要同步
- 部署nacos以及nacos-sync集群
- 发布spring-cloud-gateway和创建elk日志
- 修改nginx配置,逐步迁移isv、open、 portal等接口修改路由权重
- 运维使用nacos-encryptor进行加密,并将加密后的信息同步至nacos的env.properties中
- 新增【加密密钥】启动参数至腾讯云
- 创建所有服务eureka->nacos的同步任务
- 创建服务nacos->eureka的同步任务以及逐步上线服务
- 下线网关以及eureka、config server、nacos-sync、rabbitMQ
结语
以上就是从eureka平滑迁移至nacos的方案,以及方案间的优劣、上线步骤。哪其实我们在做的时候并不只是切换注册中心。
我们还对配置文件重新做了整理,抽象出env.yml文件作为环境变量配置文件,各服务新增${spring.application.name}-custom.properties配置文件用于存放独立部署环境的订制配置文件。
迁移过程中我们还将原业务网关从zuul切换到了spring-cloud-gateway