面试:Nacos、Apollo、Config配置中心如何选型?10个维度告诉你

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
img

正文

Nacos

=====

2018年6月,阿里开源的配置中心,也可以做DNS和RPC的服务发现。

3、配置中心核心概念的对比

=============

由于Disconf不再维护,下面对比一下Spring Cloud Config、Apollo和Nacos。Spring Cloud Config、Apollo和Nacos在配置管理领域的概念基本相同,但是也存在一些不同的点,使用配置的过程中会涉及到一些比较重要的概念。

1、应用

====

应用是客户端系统的基本单位,Spring Cloud Config 将应用名称和对应Git中的文件名称关联起来了,这样可以起到多个应用配置相互隔离的作用。Apollo的配置都是在某个应用下面的(除了公共配置),也起到了多个应用配置相互隔离的作用。Nacos的应用概念比较弱,只有一个用于区分配置的额外属性,不过可以使用 Group 来做应用字段,可以起到隔离作用。

2、集群

====

不同的环境可以搭建不同的集群,这样可以起到物理隔离的作用,Spring Cloud Config、Apollo、Nacos都支持多个集群。

3、 Label Profile & 环境 & 命名空间

============================

Spring Cloud Config可以使用Label和Profile来做逻辑隔离,Label指远程仓库的分支,Profile类似Maven Profile可以区分环境,比如{application}-{profile}.properties。

Nacos的命名空间和Apollo的环境一样,是一个逻辑概念,可以作为环境逻辑隔离。Apollo中的命名空间指配置的名称,具体的配置项指配置文件中的一个Property。

4、配置管理功能的对比

===========

作为配置中心,配置的整个管理流程应该具备流程化能力。

1、灰度发布

======

配置的灰度发布是配置中心比较重要的功能,当配置的变更影响比较大的时候,需要先在部分应用实例中验证配置的变更是否符合预期,然后再推送到所有应用实例。

Spring Cloud Config支持通过/bus/refresh端点的destination参数来指定要更新配置的机器,不过整个流程不够自动化和体系化。

Apollo可以直接在控制台上点灰度发布指定发布机器的IP,接着再全量发布,做得比较体系化。Nacos目前发布到0.9版本,还不支持灰度发布。

2、权限管理

======

配置的变更和代码变更都是对应用运行逻辑的改变,重要的配置变更常常会带来核弹的效果,对于配置变更的权限管控和审计能力同样是配置中心重要的功能。

Spring Cloud Config依赖Git的权限管理能力,开源的GitHub权限控制可以分为Admin、Write和Read权限,权限管理比较完善。

Apollo通过项目的维度来对配置进行权限管理,一个项目的owner可以授权给其他用户配置的修改发布权限。

Nacos目前看还不具备权限管理能力。

3、版本管理&回滚

=========

当配置变更不符合预期的时候,需要根据配置的发布版本进行回滚。Spring Cloud Config、Apollo和Nacos都具备配置的版本管理和回滚能力,可以在控制台上查看配置的变更情况或进行回滚操作。Spring Cloud Config通过Git来做版本管理,更方便些。

4、配置格式校验

========

应用的配置数据存储在配置中心一般都会以一种配置格式存储,比如Properties、Json、Yaml等,如果配置格式错误,会导致客户端解析配置失败引起生产故障,配置中心对配置的格式校验能够有效防止人为错误操作的发生,是配置中心核心功能中的刚需。Spring Cloud Config使用Git,目前还不支持格式检验,格式的正确性依赖研发人员自己。Apollo和Nacos都会对配置格式的正确性进行检验,可以有效防止人为错误。

5、监听查询

======

当排查问题或者进行统计的时候,需要知道一个配置被哪些应用实例使用到,以及一个实例使用到了哪些配置。Spring Cloud Config使用Spring Cloud Bus推送配置变更,Spring Cloud Bus兼容 RabbitMQ、Kafka等,支持查询订阅Topic和Consumer的订阅关系。Apollo可以通过灰度实例列表查看监听配置的实例列表,但实例监听的配置(Apollo称为命名空间)目前还没有展示出来。

Nacos可以查看监听配置的实例,也可以查看实例监听的配置情况。

基本上,这三个产品都具备监听查询能力,在我们自己的使用过程中,Nacos使用起来相对简单,易用性相对更好些。

6、多环境

=====

在实际生产中,配置中心常常需要涉及多环境或者多集群,业务在开发的时候可以将开发环境和生产环境分开,或者根据不同的业务线存在多个生产环境。如果各个环境之间的相互影响比较小(开发环境影响到生产环境稳定性),配置中心可以通过逻辑隔离的方式支持多环境。

Spring Cloud Config支持Profile的方式隔离多个环境,通过在Git上配置多个Profile的配置文件,客户端启动时指定Profile就可以访问对应的配置文件。

Apollo也支持多环境,在控制台创建配置的时候就要指定配置所在的环境,客户端在启动的时候指定JVM参数ENV来访问对应环境的配置文件。

Nacos通过命名空间来支持多环境,每个命名空间的配置相互隔离,客户端指定想要访问的命名空间就可以达到逻辑隔离的作用。

7、多集群

=====

当对稳定性要求比较高,不允许各个环境相互影响的时候,需要将多个环境通过多集群的方式进行物理隔离。

Spring Cloud Config可以通过搭建多套Config Server,Git使用同一个Git的多个仓库,来实现物理隔离。

Apollo可以搭建多套集群,Apollo的控制台和数据更新推送服务分开部署,控制台部署一套就可以管控多个集群。

Nacos控制台和后端配置服务是部署在一起的,可以通过不同的域名切换来支持多集群。

5、配置实时推送的对比

===========

当配置变更的时候,配置中心需要将配置实时推送到应用客户端。

Nacos和Apollo配置推送都是基于HTTP长轮询,客户端和配置中心建立HTTP长联接,当配置变更的的时候,配置中心把配置推送到客户端。

面试:Nacos、Apollo、Config配置中心如何选型?10个维度告诉你

Spring Cloud Config原生不支持配置的实时推送,需要依赖Git的WebHook、Spring Cloud Bus和客户端/bus/refresh端点:

  • 基于Git的WebHook,配置变更触发server端refresh

  • Server端接收到请求并发送给Spring Cloud Bus

  • Spring Cloud Bus接到消息并通知给客户端

  • 客户端接收到通知,请求Server端获取最新配置

面试:Nacos、Apollo、Config配置中心如何选型?10个维度告诉你

整体比较下来,Nacos和Apollo在配置实时推送链路上是比较简单高效的,Spring Cloud Config的配置推送引入Spring Cloud Bus,链路较长,比较复杂。

6、部署结构 & 高可用的对比

===============

1、Spring Cloud Config

=====================

Spring Cloud Config包含config-server、Git和Spring Cloud Bus三大组件:

  • config-server提供给客户端获取配置;

  • Git用于存储和修改配置;

  • Spring Cloud Bus通知客户端配置变更;

本地测试模式下,Spring Cloud Bus和config-server需要部署一个节点,Git使用GitHub就可以。在生产环境中,Spring Cloud Config,config-server需要部署至少两个节点。Spring Cloud Bus如果使用RabbitMQ,普通集群模式至少需要两个节点。

Git服务如果使用GitHub就不用考虑高可用问题,如果考虑到安全性要自建Git私有仓库,整体的成本比较高。Web服务可以部署多节点支持高可用,由于Git有数据的一致性问题,可以通过以下的方式来支持高可用:

  • Git+Keepalived冷备模式,当主Git挂了可以马上切到备Git;

  • Git多节点部署,存储使用网络文件系统或者通过DRBD实现多个Git节点的数据同步;

2、Apollo

========

Apollo分为MySQL,Config Service,Admin Service,Portal四个模块:

  • MySQL存储Apollo元数据和用户配置数据;

  • Config Service提供配置的读取、推送等功能,客户端请求都是落到Config Service上;

  • Admin Service提供配置的修改、发布等功能,Portal操作的服务就是Admin Service;

  • Portal提供给用户配置管理界面;

本地测试Config Service,Admin Service,Portal三个模块可以合并一起部署,MySQL单独安装并创建需要的表结构。在生产环境使用Apollo,Portal可以两个节点单独部署,稳定性要求没那么高的话,Config Service和Admin Service可以部署在一起,数据库支持主备容灾。

3、Nacos

=======

Nacos部署需要Nacos Service和MySQL:

  • Nacos对外提供服务,支持配置管理和服务发现;

  • MySQL提供Nacos的数据持久化存储;

单机模式下,Nacos可以使用嵌入式数据库部署一个节点,就能启动。如果对MySQL比较熟悉,想要了解整体数据流向,可以安装MySQL提供给Nacos数据持久化服务。生产环境使用Nacos,Nacos服务需要至少部署三个节点,再加上MySQL主备。

4、整体来看

======

Nacos的部署结构比较简单,运维成本较低。Apollo部署组件较多,运维成本比Nacos高。Spring Cloud Config生产高可用的成本最高。

7、多语言支持的对比

==========

一个公司的各个系统可能语言不尽相同,现在使用的比较多的比如C++,Java,PHP,Python,Nodejs,还有Go等。引入配置中心之后,配置中心要想让多语言的系统都能享受到动态配置的能力,需要支持多语言生态。

紧跟潮流

大前端和全栈是以后前端的一个趋势,懂后端的前端,懂各端的前端更加具有竞争力,以后可以往这个方向靠拢。

这边整理了一个对标“阿里 50W”年薪企业高级前端工程师成长路线,由于图片太大仅展示一小部分

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
工程师成长路线,由于图片太大仅展示一小部分

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-w7Rx4d7L-1713107786605)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 28
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值