作者:微信小助手
发布时间:2022-06-13T08:47:03
今天深入聊一聊携程开源的一款分布式配置中心Apollo,在功能上和Nacos不相上下。 由于 Apollo 概念比较多,刚开始使用比较复杂,最好先过一遍概念再动手实践尝试使用。 随着程序功能的日益复杂,程序的配置日益增多,各种功能的开关、参数的配置、服务器的地址……对程序配置的期望值也越来越高,配置修改后实时生效,灰度发布,分环境、分集群管理配置,完善的权限、审核机制…… 在这样的大环境下,传统的通过配置文件、数据库等方式已经越来越无法满足开发人员对配置管理的需求。因此 Apollo 配置中心应运而生! Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。 如下即是 Apollo 的基础模型: Apollo支持4个维度管理Key-Value格式的配置: (1)、application (2)、environment 在实际开发中,我们的应用经常要部署在不同的环境中,一般情况下分为开发、测试、生产等等不同环境,不同环境中的配置也是不同的,在 Apollo 中默认提供了四种环境: 在程序中如果想指定使用哪个环境,可以配置变量 (3)、cluster (4)、namespace 一个应用中不同配置的分组,可以简单地把 namespace 类比为不同的配置文件,不同类型的配置存放在不同的文件中,如数据库配置文件,RPC 配置文件,应用自身的配置文件等。 熟悉 SpringBoot 的都知道,SpringBoot 项目都有一个默认配置文件 Namespace 分为两种权限,分别为: Namespace 分为三种类型,分别为: Apollo客户端会把从服务端获取到的配置在本地文件系统缓存一份,用于在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置,不影响应用正常运行。 本地缓存路径默认位于以下路径,所以请确保/opt/data或C:\opt\data\目录存在,且应用有读写权限。 本地配置文件会以下面的文件名格式放置于本地缓存路径下: 上图简要描述了Apollo客户端的实现原理 客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。 客户端还会定时从 Apollo 配置中心服务端拉取应用的最新配置。 客户端从 Apollo 配置中心服务端获取到应用的最新配置后,会保存在内存中。 客户端会把从服务端获取到的配置在本地文件系统缓存一份 在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置。 应用程序从 Apollo 客户端获取最新的配置、订阅配置更新通知。 前面提到了 Apollo 客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。长连接实际上我们是通过 Http Long Polling 实现的,具体而言: 客户端发起一个 Http 请求到服务端 服务端会保持住这个连接 60 秒 客户端在收到服务端请求后会立即重新发起连接,回到第一步 考虑到会有数万客户端向服务端发起长连,在服务端我们使用了 async servlet(Spring DeferredResult) 来服务 Http Long Polling 请求。 上图简要描述了Apollo的总体设计,我们可以从下往上看: 配置中心作为基础服务,可用性要求非常高,下面的表格描述了不同场景下Apollo的可用性:1. 基本概念
1、背景
2、简介
3、特点
4、基础模型
5、Apollo 的四个维度
app.id
参数来标识当前应用,Apollo 会根据此指来辨别当前应用。
env
的值为对应环境名称即可。
application.yml
,如果还想用多个配置,可以创建多个配置文件来存放不同的配置信息,通过指定 spring.profiles.active
参数指定应用不同的配置文件。这里的 namespace
概念与其类似,将不同的配置放到不同的配置 namespace
中。
6、本地缓存
{appId}+{cluster}+{namespace}.properties
7、客户端设计
apollo.refreshInterval
来覆盖,单位为分钟。
8、总体设计
9、可用性考虑