文章目录
一、apollo是什么
[官方文档很全,也很详细]官网地址:https://github.com/ctripcorp/apollo
apollo是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端。

用户在配置中心对配置进行修改并发布
配置中心通知Apollo客户端有配置更新
Apollo客户端从配置中心拉取最新的配置、更新本地配置并通知到应用
1. 为什么要配置中心?
微服务为什么要配置中心?
参考URL: https://blog.youkuaiyun.com/yang75108/article/details/86987941https://blog.youkuaiyun.com/yang75108/article/details/86987941
GitHub 9K Star!Apollo作者手把手教你微服务配置中心之道
参考URL: https://mp.weixin.qq.com/s/iDmYJre_ULEIxuliu1EbIQ
在没有引入配置中心之前,一般企业研发都会面临如下痛点:
-
配置散乱格式不标准
有的用properties格式,有的用xml格式,还有的存DB,团队倾向自造轮子,做法五花八门。 -
主要采用本地静态配置,配置修改麻烦
配置修改一般需要经过一个较长的测试发布周期。在分布式微服务环境下,当服务实例很多时,修改配置费时费力。 -
易引发生产事故
团队在发布的时候将测试环境的配置带到生产上,引发生产事故。 -
配置缺乏安全审计和版本控制功能
谁改的配置?改了什么?什么时候改的?无从追溯,出了问题也无法及时回滚。
2. apollo功能特性
官网:https://github.com/ctripcorp/apollo/wiki/Apollo%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83%E4%BB%8B%E7%BB%8D
统一管理不同环境、不同集群的配置
配置修改实时生效(热发布)
版本发布管理
灰度发布
权限管理、发布审核、操作审计
客户端配置信息监控
提供Java和.Net原生客户端
提供开放平台API
部署简单
二、核心概念
Apollo支持4个维度管理Key-Value格式的配置:
application (应用)
environment (环境)
cluster (集群)
namespace (命名空间)
1. application (应用)
- application 就是实际使用配置的应用,就是指我们的业务服务。
- 每个应用都需要有唯一的身份标识 - appId,我们认为应用身份是跟着代码走的,所以需要在代码中配置。
2. environment (环境)
- 配置对应的环境,Apollo客户端在运行时需要知道当前应用处于哪个环境,从而可以去获取应用的配置。
- 我们认为环境和代码无关,同一份代码部署在不同的环境就应该能够获取到不同环境的配置。
- 所以环境默认是通过读取机器上的配置(server.properties中的env属性)指定的,不过为了开发方便,我们也支持运行时通过System Property等指定,具体信息请参见Java客户端使用指南。
3. cluster (集群)
- 一个应用下不同实例的分组,比如典型的可以按照数据中心分,把上海机房的应用实例分为一个集群,把北京机房的应用实例分为另一个集群。
- 对不同的cluster,同一个配置可以有不一样的值,如zookeeper地址。
- 集群默认是通过读取机器上的配置(server.properties中的idc属性)指定的,不过也支持运行时通过System Property指定,具体信息请参见Java客户端使用指南。
4. namespace (命名空间)
Apollo核心概念之“Namespace”
参考URL: https://github.com/ctripcorp/apollo/wiki/Apollo%E6%A0%B8%E5%BF%83%E6%A6%82%E5%BF%B5%E4%B9%8B%E2%80%9CNamespace%E2%80%9D
- Namespace是配置项的集合,类似于一个配置文件的概念
- 一个应用下不同配置的分组,可以简单地把namespace类比为文件,不同类型的配置存放在不同的文件中,如数据库配置文件,rpc配置文件,应用自身的配置文件等
- 应用可以直接读取到公共组件的配置namespace,如DAL,RPC等
- 应用也可以通过继承公共组件的配置namespace来对公共组件的配置做调整,如DAL的初始数据库连接数
如果应用有公共组件(如hermes-producer,cat-client等)供其它应用使用,就需要通过自定义namespace来实现公共组件的配置。
三、架构和模块
【推荐-写的很好】微服务架构~携程Apollo配置中心架构剖析
参考URL: https://mp.weixin.qq.com/s/-hUaQPzfsl9Lm3IqQW3VDQ

1. 四个核心模块及其主要功能
-
ConfigService
Config Service提供配置的读取、推送等功能,服务对象是Apollo客户端。
-
AdminService
Admin Service提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面)
Config Service和Admin Service都是多实例、无状态部署,所以需要将自己注册到Eureka中并保持心跳 -
Client
Apollo提供的客户端程序,为应用提供配置获取、实时更新等功能
通过Meta Server获取Config Service服务列表(IP+Port),通过IP+Port访问服务,而后直接通过IP+Port访问服务,同时在Client侧会做load balance、错误重试
-
Portal
提供Web界面供用户管理配置
Portal通过Meta Server获取Admin Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Portal侧会做load balance、错误重试。
上图简要描述了配置发布的大致过程:
- 用户在Portal操作配置发布
- Portal调用Admin Service的接口操作发布
- Admin Service发布配置后,发送ReleaseMessage给各个Config Service
- Config Service收到ReleaseMessage后,通知对应的客户端
2. 三个辅助服务发现模块
-
Eureka
- 基于Eureka提供服务注册和发现
- Config Service和Admin Service会向Eureka注册服务,并保持心跳
- 为了简单起见,目前Eureka在部署时和Config Service是在一个JVM进程中的
-
Meta Server
-
Portal通过域名访问Meta Server获取Admin Service服务列表(IP+Port)
-
Client通过域名访问Meta Server获取Config Service服务列表(IP+Port)
-
Meta Server从Eureka获取Config Service和Admin Service的服务信息,相当于是一个Eureka Client
-
增设一个Meta Server的角色主要是为了封装服务发现的细节,对Portal和Client而言,永远通过一个Http接口获取Admin Service和Config Service的服务信息,而不需要关心背后实际的服务注册和发现组件
-
Meta Server只是一个逻辑角色,在部署时和Config Service是在一个JVM进程中的,所以IP、端口和Config Service一致
-
-
NginxLB
- 和域名系统配合,协助Portal访问MetaServer获取AdminService地址列表
- 和域名系统配合,协助Client访问MetaServer获取ConfigService地址列表
- 和域名系统配合,协助用户访问Portal进行配置管理
四、Apollo和Spring Cloud Config配置中心对比

五、角色权限配置

总结: 项目管理员(应用负责人)的权限还是比较大的,可以配置配置的修改和发布权限。 要限制某个账号某个环境不可修改或不可发布,使用一个非项目管理员的账号。
六、单机测试安装步骤
官方参考: https://github.com/nobodyiam/apollo-build-scripts
1. 准备:下载Quick Start安装包
官方准备了一个 Quick Start安装包,针对本地测试使用。Quick Start会在本地同时启动服务端和客户端。
不过这里需要注意的是,Quick Start只针对本地测试使用,如果要部署到生产环境,还请另行参考分布式部署指南。
下载解压Quick Start安装包
[root@localhost ~]# unzip -d apollo-quick-start-1.6.1 apollo-quick-start-1.6.1.zip
2. 创建数据库
Apollo服务端共需要两个数据库:ApolloPortalDB和ApolloConfigDB
导入安装包sql/目录下的两个sql脚本。
3. 配置数据库连接信息
Apollo服务端需要知道如何连接到你前面创建的数据库,所以需要编辑demo.sh,修改ApolloPortalDB和ApolloConfigDB相关的数据库连接串信息。
#apollo config db info
apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=用户名
apollo_config_db_password=密码(如果没有密码,留空即可)
# apollo portal db info
apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=用户名
apollo_portal_db_password=密码(如果没有密码,留空即可)
4. 启动服务
Quick Start脚本会在本地启动3

Apollo是携程框架部门研发的分布式配置中心,它能够集中化管理应用的配置,支持多环境、多集群的配置管理。文章详细介绍了Apollo的核心概念,包括application、environment、cluster和namespace,以及其服务架构和模块,包括ConfigService、AdminService和Meta Server。此外,还提供了Apollo与Spring Cloud Config的对比、角色权限配置、单机和分布式环境的安装步骤,以及传统Spring环境下的客户端集成。文章还涵盖Apollo动态修改配置的原理和常见问题,如环境配置、服务发现和本地缓存路径,帮助读者深入理解并实践Apollo配置中心。
最低0.47元/天 解锁文章
3506

被折叠的 条评论
为什么被折叠?



