配置中心原理和选型:Disconf、Apollo、Spring Cloud Config 和 Nacos

402次阅读  |  发布于2年以前

讲解4种常用的配置中心,对比其流程和原理,无论是面试还是技术选型,都非常有帮助。

大家好, 这是我写的第5篇关于“技术选型”相关的文章,前4篇分别为消息队列、注册中心、微服务网关、RPC框架,这篇配置中心应该是该系列的最后一篇,前后跨度近一年,应该是我跨度时间最长的一个系列了。

学完注册中心,再看配置中心这块,感觉简单很多,因为很多知识原理是相辅相成的,下面是文章目录:

配置中心基础

为什么要用配置中心?

配置中心支持功能

常用配置中心

写在前面

如果只要能作为分布式存储的服务都作为配置中心,那选择途径就太多了, 比如Zookeeper和ETCD,所以需要提前说明一下。

在文章 《注册中心原理和选型:Zookeeper、Eureka、Nacos、Consul和ETCD》 已经提到过,Zookeeper和ETCD可以存储数据,作为配置中心使用,比如我司的微服务网关,将配置发布到ETCD,供网关各模块调用,具体可以参考文章 [《微服务网关:从对比到选型,由理论到实践》] 。

但是我们选择配置中心时,为什么不优先考虑Zookeeper和ETCD,因为以下两点原因:

大白话总结一下,就是专业的人干专业的事,他两很多功能没法支持。可能你会问,那你们公司为啥用ETCD作为配置中心呢?因为我们自己写了个后台,支持权限、灰度发布、版本控制等功能。

所以给大家介绍的配置中心,主要是以下4种,分别为 Disconf、Spring Cloud Config、Apollo 和 Nacos

Apollo

GitHub:https://github.com/apolloconfig/apollo

Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,具备规范的权限、流程治理等特性。

Apollo框架

Apollo的框架有点复杂,如果不考虑分布式微服务架构中的服务发现问题,Apollo的最简架构如下图所示:

这里面包含Apollo框架的4个核心模块

调用流程

  1. ConfigService是一个独立的微服务,服务于Client进行配置获取。
  2. Client和ConfigService保持长连接,通过一种拖拉结合(push & pull)的模式,实现配置实时更新的同时,保证配置更新不丢失。
  3. AdminService是一个独立的微服务,服务于Portal进行配置管理。Portal通过调用AdminService进行配置管理和发布。
  4. ConfigService和AdminService共享ConfigDB,ConfigDB中存放项目在某个环境的配置信息。ConfigService/AdminService/ConfigDB三者在每个环境(DEV/FAT/UAT/PRO)中都要部署一份。
  5. Protal有一个独立的PortalDB,存放用户权限、项目和配置的元数据信息。Protal只需部署一份,它可以管理多套环境。

加上分布式微服务架构中的服务发现,真正的Apollo框架如下:

如果你了解RPC和注册中心,这幅图其实不难理解:

所以搞NginxLB + Meta Server,其实就是为了找Eureka中的机器列表配置,Client和Portal拿到这些机器配置,就可以发起调用了,最后就回到我们前面的简图,是不是So Easy!

我讲的已经够清楚了,如果还是不懂,就看这篇文章 [《微服务架构~携程Apollo配置中心架构剖析》]

Apollo特性

最后通过后台界面,直观感受一下:

Disconf

GitHub:https://github.com/knightliao/disconf

2014年7月百度开源的配置管理中心,同样具备配置的管理能力,不过目前已经不维护,最近的一次提交是两年前了。

Disconf框架

Disconf是一套完整的基于zookeeper的分布式配置统一解决方案,它通过disconf-web管理配置信息,然后将配置的key在Zookeeper上建立节点,disconf-client启动后拉取自身需要的配置信息并监听Zookeeper的节点。在web上更新配置信息会触发zk节点状态的变动,client可以实时感知到变化,然后从web上拉取最新配置信息。

这里想吐槽一下,Disconf官方文档的图画真的丑啊,关键是很不清晰,就不能好好维护一下么?

Disconf特点

Spring Cloud Config

GitHub:https://github.com/spring-cloud/spring-cloud-config

2014年9月开源,Spring Cloud 生态组件,可以和Spring Cloud体系无缝整合。

Spring Cloud Config 工作原理

应用架构图:

工作流程:

Spring Cloud Config 特点

Nacos

Nacos官网:https://nacos.io/zh-cn/docs/what-is-nacos.html

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

Nacos 主要特点

服务发现和服务健康监测

动态配置服务

动态 DNS 服务

小节一下:

  • Nacos是阿里开源的,支持基于 DNS 和基于 RPC 的服务发现。
  • Nacos的注册中心支持CP也支持AP,对他来说只是一个命令的切换,随你玩,还支持各种注册中心迁移到Nacos,反正一句话,只要你想要的他就有。
  • Nacos除了服务的注册发现之外,还支持动态配置服务,一句话概括就是Nacos = Spring Cloud注册中心 + Spring Cloud配置中心

配置中心对比和选型

由于 Disconf 不再维护,下面对比一下 Spring Cloud Config、Apollo 和 Nacos。

配置中心对比

配置中心选型

总的来说:

此外,Nacos除了提供配置中心的功能,还提供了动态服务发现、服务共享与管理的功能,降低了服务化改造过程中的难度。

但对于一个开源项目的选型,除了以上这几个方面,项目上的人力投入(迭代进度、文档的完整性)、社区的活跃度(issue的数量和解决速度、Contributor数量、社群的交流频次等)、社区的规范程度(免责说明、安全性说明等),这些可能才是用户更关注的内容。

更多对比选型内容,请参考文章 [《阿里面试这样问:Nacos、Apollo、Config配置中心如何选型?这10个维度告诉你!》] ,文中很多知识点也是来自该文章。

尽信书则不如无书,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8