Apollo 配置中心的应用实践1 前言 在日常的分布式系统开发过程中,项目配置是一个不可或缺的重要环节。尤其是在微服务
天地英雄气,千秋尚凛然。
1 前言
在日常的分布式系统开发过程中,项目配置是一个不可或缺的重要环节。尤其是在微服务架构中,配置项的管理、发布和更新更是至关重要。Apollo
作为一款开源的配置中心中间件,它提供了一套完整的解决方案。本文将将结合项目实践详细介绍 Apollo
的技术架构,了解其配置更新的流程,充分理解并利用好其特性,在工作中发挥更大的作用。
2 Apollo 整体架构
Apollo 的架构设计如上图所示,它包括多个组件,每个组件承担不同的职责,确保配置管理的高效和可靠。其核心组件包括:
- 1
Portal
Portal
是 Apollo
的管理界面,给管理员提供 web
页面来进行配置的管理,主要可以查看各个环境和应用的配置情况,编辑配置信息,对配置信息进行加密,以及查看配置信息的使用情况,并且对配置信息提供了权限管理。
- 2 客户端(Client)
客户端 Client
是集成在各个应用中的轻量级 SDK
, 负责与 ConfigService
进行通信,获取最新的配置。客户端可以缓存配置服务推送的配置信息,在配置服务不可用时,可以使用本地缓存配置,保证应用的稳定性。
- 3 配置服务(Config Service)
配置服务负责配置的读取和配置的推送,它的服务对象主要是客户端,客户端通过 ConfigService
来获取最新的配置,它从数据库中读取配置信息并返回给客户端,当数据库中的配置信息发生变更时,配置服务需要主动推送最新的配置信息给客户端。
- 4 管理服务(Admin Service)
管理服务 AdminService
负责配置的管理和变更,管理员可以通过管理服务来新增、修改、删除配置信息,而且对配置信息进行了版本的控制,支持版本的回滚,在发布配置时可以选择灰度发布。
3 Apollo 配置更新流程
Apollo
还有内置的注册中心 eureka
, 用于各个组件进行服务注册和发现,MetaServer
是对注册中心接口的封装,通过 loadbalancer
对外提供服务。
管理员通过 portal
, 即门户网站修改配置信息,然后调用 AdminService
修改和发布配置,将配置信息存储在数据库中,并写入数据库消息表 ReleaseMessage
中,ClientService
通过定时任务扫描消息表来获取最新的配置信息,并将配置信息推送给所有订阅的客户端。客户端接收到配置信息后,会将配置信息缓存在本地,在连接不到 ConfigService
时,依旧可以读取本地配置。
Client
和 ConfigService
之间通过 Http Long Polling
保持了一个长链接,通过每 5分钟的定时任务来拉取配置,同时客户端也会上报本地的版本,用来确定配置文件是否更新。
Apollo
是集群部署的,对于 Apollo
的可用性情况,如下图所示:
4 代码实践
对于 Apollo
的配置,支持 4
个维度管理 Key-Value
:
1 application (应用), 即每个应用信息
2 environment (环境),服务发布的环境
3 cluster (集群), 即集群信息
4 namespace (命名空间),最小的配置单元
其配置内容如下图所示:
除了以上,Apollo
可以通过实现 ConfigChangeListener
接口来实现配置项的更新监听。Apollo
的配置信息更新可以实现秒级的近实时更新,这在实际的业务开发中有着重要的作用,比如功能的开关,参数的配置,以及服务器的地址等等。
需要注意的是,namesapces
可以设置多个,其中的配置信息,先加载的先生效,这一点和 springboot
的配置文件生效顺序相反。
配置信息的优先级
启动参数(启动参数配置 -Dstudent.age=12) > 远程配置 > 本地(本地排序 classpath:/,classpath:/config/,file:./,file:./config/)
5 总结
在本文中主要介绍了 Apollo
的架构设计以及配置更新的流程和原理,在最后介绍了 Apollo
的项目实践,为后续的业务开发打下坚实的基础。
转载自:https://juejin.cn/post/7411168576432717865