侧边栏壁纸
博主头像
翻斗

开始一件事最好是昨天,其次是现在

  • 累计撰写 44 篇文章
  • 累计创建 42 个标签
  • 累计收到 2 条评论

微服务配置中心迁移

翻斗
2021-05-08 / 0 评论 / 0 点赞 / 392 阅读 / 2,442 字

前提描述

公司已有的配置中心,是比较简单的Spring Cloud Config,用起来比较不方便,集中在以下几点:

  • 1、全部基于git实现,手动改写文件
  • 2、动态刷新实现起来非常复杂
  • 3、没有完善的portal(管理、审核、发布、批量处理、格式校验、历史回滚等)

要改造,先调研,下面我们看看各种竞品。

Apollo vs Nacos

通过调研市场上各种主流框架(参考社区活跃度、稳定性、便利性、使用人数等)之后,我们最终还剩下两个框架:Apollo和Nacos,下面我们会对这两个产品进行各方面的比对,看哪个更适合做迁移(不是新建,重点是迁移)。

接入方式

概念区别

这两个框架在一些概念、术语上面还是有不小区别的:

概念区别 Apollo Nacos 备注
应用(APP) Apollo中应用是最高维度,就是一个项目,根据项目才有其他配置 只有app_name用于DataID查找配置文件,没有更多应用的概念 Apollo中的环境隔离,让部署比较麻烦,但是不同环境因此不会相互影响,保证了数据稳定性。 Nacos的环境类似Spring Cloud Config的环境,就是一个配置文件的切换变量而已。
环境(Enviroment) 应用之下就是环境,概念比较大,一个环境可能有多个集群(不同地理区域之类) 概念很小,没有专门区分,可以用命名空间和Group进行环境划分 现阶段暂时用不上集群,默认default就行
集群(Cluster) 不同的环境下都有可能有不同的集群 集群概念最大,每个集群都是一个完整的配置服务中心 Apollo是比较老一些的按照应用进行管理的思想,Nacos是比较新一点的按照下方说的Namespace > GroupID > DataID进行管理的思想(Spring Cloud Config升级版)
命名空间(Namespace) 相当于应用下的不同配置文件,默认是application 命名空间用来区分环境(差不多的还有个 组(GroupID)的说法) Nacos的命名空间更合理一些, 环境按照 Namespace > GroupID > DataID来区分,层级关系比较明显 (比如Namespace为prd, GroupID为EC, DataID为 ec-mkt.yaml,或者Namespace和GroupID都没有,直接DataID为ec-mkt-prd.yaml都是可以的)
上述四个关系 应用 > 环境 > 集群 > 命名空间 集群 >命名空间 > 应用 > 环境 不同的概念程度导致了二者结构设计以及后台管理的不同
如何定位到具体的配置 根据配置文件中指定的环境配置服务(ConfigServer),后续的配置获取,自动从对应服务的DB中返回 根据Data ID (appName + active_env的方式,类似Spring Cloud Config, 比如ec-mkt-dev.yaml这个DataId就自动找到ec-mkt项目的dev环境的配置文件) Apollo是自己的一套实现方案,Nacos是兼容了Spring Cloud体系的(更像是其升级),所以Nacos的使用跟现有的会比较像,Apollo的理念需要工程师有个新的印象。

代码迁移方面

下面关注一下代码迁移方面:

关注点: 代码迁移 Apollo Nacos 备注
代码变化-静态配置 现有项目就是静态配置的,不过一些需要动态配置的情况都需要重启服务
代码变化-动态配置 默认开启动态,可以在配置文件中禁止(部分动态兼容性问题,可以提取公共帮助类,配置文件中集成即可) 默认不支持动态,需要每个地方都添加@RefreshScope 理论上Nacos的更符合Spring Cloud的规则,但是当前情况Apollo的更适合迁移
配置文件变化(pom.xml + bootstrap.properties) (Apollo官方包 + Spring Cloud Context),bootstrap.properties总新增几个基础配置 (Nacos 官方包 + Spring Cloud Context),bootstrap.properties总新增几个基础配置 二者几乎一样,Apollo稍微多了几行而已
批量导入现有配置成本 高(调用OpenApi) 高(调用OpenApi) 不管怎样都需要手动写代码导入

部署方面

下面我们对比一下部署方面:

关注点:部署 Apollo Nacos 备注
单机部署成本 较低 (多个server + db) 低 (server + db)
高可用集群部署成本(物理机、虚拟机) 高(至少需要7个节点,每增加一套环境还需额外2个节点,不内置gqc环境,起码额外增加2个节点) 低(3个足够,新增环境无需额外节点) 传统高可用集群部署的话,Apollo要复杂繁重的多
K8s部署成本 二者都已经有官方教程了

管理界面方面

下面我们对比一下管理界面方面:

管理/界面方面 Apollo Nacos 备注
权限、审核 优秀 很粗糙 Apollo授权流程和操作等都很完善,有完整的操作日志。Nacos权限隔离比较简单,日志等也很粗糙
修改发布流程 表格修改,单字段修改,错误检测 还相当于是修改文件 这一点Apollo的操作很舒适,Nacos和现有的Spring Cloud Config比较像,还是在大文件中修改的感觉。
灰度支持 很完善(基于配置 + 灰度机器ip进行灰度,可以合并到主配置) 仅有灰度机器ip Apollo 灰度更完善(注意,两者都有问题就是机器ip这个遇到docker/k8s会有问题,官方暂时没有解决)
历史/回滚 查询以及固定版本回退都很清晰 勉强支持,很粗糙 Apollo后台舒适很多
集群隔离/名字空间隔离 这个现阶段还用不着

总结

Apollo偏重,Nacos偏轻。但是后台管理要比Nacos完善很多。Apollo很方便日后集中管理,。另外,对于当前代码迁移工作量而言,Apollo的稍微低一些(如果是新开项目,还是Nacos更快,但是迁移现有项目,Apollo更合适),不过Apollo部署稍微要麻烦些。

最终打算还是使用Apollo,主要是管理方便。

0

评论区