官网地址:apollo官网github地址git
官方文档很全,也很详细,本文是在官网的基础上精简而来做为笔记github
1.apollo是携程框架部门研发的分布式配置中心,可以集中化管理应用不一样环境、不一样集群的配置,配置修改后可以实时推送到应用端spring
2.特性:api
1).统一管理不一样环境、不一样集群的配置 2).配置修改实时生效(热发布) 3).版本发布管理(配置文件回滚) 4).灰度发布 *:点了发布后,只对部分应用实例生效,等观察一段时间没问题后再推给全部应用实例 5).权限管理、发布审核、操做审计 *:对配置的管理分为编辑和发布两个环节
3.发布流程:缓存
1).用户在配置中心对配置进行修改并发布 2).配置中心通知Apollo客户端有配置更新 3).Apollo客户端从配置中心拉取最新的配置、更新本地配置并通知到应用
1.api整合方式springboot
Config config = ConfigService.getAppConfig();// 获取application配置文件 Config config = ConfigService.getConfig(somePublicNamespace);// 根据名称获取配置文件
网络
2.和spring整合架构
` xmlns:apollo="http://www.ctrip.com/schema/apollo" xsi:schemaLocation="http://www.ctrip.com/schema/apollo http://www.ctrip.com/schema/apollo.xsd"并发
apollo:config/<!—最简单的配置形式,注入application配置文件--> `app
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). 配置文件加入<apollo:config/> 4). 本地文件设置环境信息:server.properties env=DEV
一、Config service提供配置读取、推送等功能, 服务对象是apollo客户端
二、Admin service提供配置修改、发布等功能, 服务对象是portal管理界面
三、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客户端中获取最新的配置