1.简介
能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。
配置信息简介
1、配置是独立于程序的只读变量
#配置首先独立于程序的,同一份程序在不同的配置下会有不同的行为。
#其次,配置对于程序是只读,程序通过读取配置来改变自己的行为,但是程序不应该去改变配置。
#常见的配置有:DB Connection Str等
2、配置伴随应用的整个生命周期
#配置贯穿于应用的整个生命周期,应用启动时通过读取配置来初始化,在运行时根据配置调行为。
3、配置可有多种加载方式
#配置也有很多种加载方式,常见的有程序内部hard code,配置文件,在环境变量,启动参数,基于数据库等
4、配置需要治理
#权限控制:
由于配置能改变的程序的行为,不正确的配置甚至能引起灾难,所以对配置的修改必须有比较完善的权限控制
#不同的环境、集群配置管理
同一份程序在不同的环境(开发、测试、生产)、不同的集群(如不同的数据中心)经常需要不同的【配置,所以需要有完善的环境、集群配置管理
5、框架类组件配置管理
# 还有一类比较特殊的配置 - 框架类组件配置,比如CAT客户端的配置。
# 虽然这类框架类组件是由其他团队开发、维护,但是运行时是在业务实际应用内的,所以本质上可以认为框架类组件也是应用的一部分
Apollo配置中心具备的功能
1.1.统一管理不同环境、不同集群的配置
Apollo提供了统一界面进行集中式管理不同环境、集群、命名空间的配置。
1.2热发布
在Apollo修改完配置发布后,客户端立即生效,并通知应用程序。
1.3版本发布管理
配置发布后都会有版本信息,支持配置的回滚。
1.4灰度发布
支持配置的先后发布,可以先对部分应用生效,过段时间再推给所有的应用实例。
1.5权限管理、发布审核、操作审计
应用和配置均有权限管理,发布过程中还会有编辑与发布两个环节,所有操作都有审计日志。
1.6客户端可以看到配置被哪些实例使用
1.7提供了Java客户端,支持Spring、同时提供了Http接口
1.8提供开放的平台API
Apollo提供了统一配置管理的界面,对配置的修改不会过多限制
1.9部署简单
Apollo目前只依赖MySQL,部署简单,只要安装好Java和MySQL,打包脚本(一键生成所需要的安装包),并且支持自定义运行时的参数。
2.Apollo基础模型
用户在配置中心对配置进行修改并发布
配置中心通知Apollo客户端有配置更新
Apollo客户端从配置中心拉取最新的配置、更新本地配置并通知到应用
3.核心概念
应用:实际使用配置的应用,Apollo客户端在运行时需要知道当前应用,从而可以去获取对应的 配置,每个应用都需要有唯一的身份标识。
环境:当前应用处于的环境,从而可以去获取应用的配置,通过读取机器上的配置(server.properties中的env属性)指定的,也支持运行时通过System Property等指定。
集群:一个应用下不同实例的分组,集群默认是通过读取机器上的配置(server.properties中的idc属性)指定的。
时通过System Property等指定。
集群:一个应用下不同实例的分组,集群默认是通过读取机器上的配置(server.properties中的idc属性)指定的。
命名空间:把namespace类比为文件,不同类型的配置存放在不同的文件中,如数据库配置文件,RPC配置文件,应用自身的配置文件等,应用可以直接读取到公共组件的配置namespace,如DAL,RPC等,也可以通过继承公共组件的配置namespace来对公共组件的配置做调整,如DAL的初始数据库连接数。