Apollo配置中心
1.什么是配置中心
-
首先讲讲什么是配置
一般来说,一个系统从发布到最终呈现给用户的步骤是先从配置文件中读取配置,诸如数据库连接池配置、线程池配置、还有与其他系统交互时需要的相关参数等等。因为我们的程序不可能做到太死板,总要留一些可以随程序运行而动态改变的参数,也可以理解为通过这些配置,我们可以在程序里动态的控制程序 运行时的状态。比如在配置a下的行为,在配置b下的行为。用一个比较专业点的词来说,也就是**“系统运行时(runtime)飞行姿态的动态调整”**
举个例子,如我们在程序中配置key-value类型的开关,我们就可以通过开关来控制程序是否要执行指定的业务逻辑。典型的例子是日志级别,我们开发和生产环境中的日志级别可能不一样,开发中我们需要看到更多的日志信息,因此可以设置logLevel=info,但在生产中可能就是debug或者warn级别的了。
早期都是通过配置文件来读取配置的,需要的配置都在文件中直接添加诸如config-key=config-value这种方式对于集中式开发来说还是比较方便的,如果需要修改配置,只需编辑配置文件后重启服务即可。然而随着目前分布式、微服务架构的崛起。配置文件似乎已经不那么实用了,一次上线可能涉及到多台机器的打包、重启,大型系统甚至有上千万的机器,其中的耗时可想而知,远不是单机时代发布一下就能解决的。如何保证在分布式集群中不停机,保持系统运行时的飞行姿态,这就是配置中心要解决的问题了。
2.配置举例
- 配置伴随应用的整个生命周期,启动时读取配置进行初始化,运行时根据配置调整行为
- 配置可以有多种加载方式(程序内部hard code,配置文件,环境变量,启动参数,基于数据库)
- 配置需要治理
- 权限控制
- 集群配置管理
- 框架类组件配置管理
我们常见的配置变更诸如:
- 线程池大小配置
- 数据库连接池
- 开关、限流配置
- 路由规则
再举几个例子:
在开发环境中将logLevel设置为DEBUG,在预发环境logLevel设置为INFO,生产环境里logLevel设置为WARNING
在日常环境执行线程池的最大线程数应该设置为15,而生产环境上这个值应该大一点,默认设为150
在线上环境中,中心机房,应用数据源需要连接A库,而S机房,应用应该就近连接使用B库
只有在T环境,双向同步开关才应该关闭
这次的改动有点大,新的特性仅在线上的H单元把该特性开放出来,其它的单元环境先不要开放出来
3.说说Apollo
我也是近期才了解apollo的,只是自己做做笔记,记录一下
3.1背景
程序配置,功能开关、参数配置、服务器地址。如修改后实时生效、分环境、分集群管理配置,完善的权限、审核机制
3.2 介绍
携程研发的开源配置管理中心,集中化管理应用不同环境、不同集群的配置,配置修改后实时推送到应用端,具备规范的权限、流程治理等特性
四个维度管理Key-value格式的配置
-
Application
-
Environment
-
Cluster
-
Namespace
亮点:统一管理、修改配置实时生效、版本发布管理(支持回滚)、灰度发布、权限管理、发布审核、客户端配置信息监控
自身优势:提供java和.net原生客户端、提供开放平台API、部署简单(可用性高、对外部依赖少、只有mysql、提供打包脚本、一键生成安装包、支持自定义运行时参数)
先写这么多…未完待续。。