一、apollo是什么
官方文档很全,也很详细,本文是在官网的基础上精简而来作为笔记
1.apollo是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端
2.特性:
1).统一管理不同环境、不同集群的配置
2).配置修改实时生效(热发布)
3).版本发布管理(配置文件回滚)
4).灰度发布
*:点了发布后,只对部分应用实例生效,等观察一段时间没问题后再推给所有应用实例
5).权限管理、发布审核、操作审计
*:对配置的管理分为编辑和发布两个环节
3.发布流程:
1).用户在配置中心对配置进行修改并发布
2).配置中心通知Apollo客户端有配置更新
3).Apollo客户端从配置中心拉取最新的配置、更新本地配置并通知到应用
二、部署配置
三、Java接入
1.api整合方式
Config config = ConfigService.getAppConfig();// 获取application配置文件 Config config = ConfigService.getConfig(somePublicNamespace);// 根据名称获取配置文件
2.和spring整合
apollo:config/ `
3.springboot接入方式
1). Maven引入私服中apollo-client包
*:在打包之前需要先配置apollo-core中apollo-env.properties的地址
2). resources目录下创建META-INF目录并新建app.properties文件
app.id=应用ID
3). 启动类上加@EnableApolloConfig注解
4). 本地文件设置环境信息:server.properties env=DEV
4.Spring方式接入
1). Maven引入私服中apollo-client包
*:在打包之前需要先配置apollo-core中apollo-env.properties的地址
2). resources目录下创建META-INF目录并新建app.properties文件
app.id=应用ID
3). 配置文件加入
4). 本地文件设置环境信息:server.properties env=DEV
四、apollo架构
1、Config service提供配置读取、推送等功能, 服务对象是apollo客户端
2、Admin service提供配置修改、发布等功能, 服务对象是portal管理界面
3、Meta server(逻辑角色)主要用于封装eureka服务发现接口(通过http获取服务信息,不需要关心背后实际的服务注册和发现组件)
五、刨根问底
配置发布后实时推送设计
1.ReleaMessage
1)、Admin Service在配置发布后会往ReleaseMessage表插入一条消息记录,消息内容就是配置发布的AppId+Cluster+Namespace
2)、Config Service有一个线程会每秒扫描一次ReleaseMessage表,看看是否有新的消息记录
3)、Config Service如果发现有新的消息记录,那么就会通知到所有的消息监听器
2.Config Service通知客户端的实现
1).客户端会发起一个Http请求到Config Service的notifications/v2接口
2).NotificationControllerV2不会立即返回结果,而是通过Spring DeferredResult把请求挂起
3).如果在60秒内没有该客户端关心的配置发布,那么会返回Http状态码304给客户端
4).如果有该客户端关心的配置发布,NotificationControllerV2会调用DeferredResult的setResult方法,传入有配置变化的namespace信息,同时该请求会立即返回
5).客户端从返回的结果中获取到配置变化的namespace后,会立即请求Config Service获取该namespace的最新配置
3.客户端的设计
1)、客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送
2)、定时从Apollo配置中心服务端拉取应用的最新配置(默认5分钟,为了防止推送机制失效导致配置不更新)
3)、客户端获取到最新的配置后会保存在内存中,然后同步到本地缓存文件 (网络不通或服务不可用时依然能从本地恢复)
4)、应用程序从apollo客户端中获取最新的配置