一:概述
1.什么是配置:
配置就是一些只读变量,它贯穿整个App的生命周期,可以通过多种加载方式(配置文件、环境变量、启动参数、基于数据库或者硬编码的形式); 所以配置需要治理。
2.常见的配置中心产品:
disconf(百度)、zookeeper、apollo(携程)、Spring Could config、nacos
3.Apollo好处:
1).server端由Spring Boot和Spring Could开发,打包后可直接运行,不需要额外安装Tomcat等应用容器。
2).Client 端不依赖任何框架,能够运行于所有Java运行环境,同时对Spring/Spring Boot环境也有较好的支持。
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.3.0</version>
</dependency>
3.多维度配置,支持不同环境、不同集群、不同命名空间、不同应用
4.支持热发布(实时生效)、版本发布、灰度发布、权限管理、发布审核、操作审计、客户端配置信息监控、操作Java
二:架构设计
1.Server架构:
1) Config Service提供配置的读取、推送等功能,服务对象时Apollo客户端;(读)
2)Admin Service提供配置的修改、发布等功能,服务的对象时Apollo Portal(管理界面);(新增、修改)
3)Config Service和Admin Service都是多实例、无状态部署,所以需要将自己注册到EureKa中并保持心跳。
4)Client通过域名访问Mate Server获取Config Service服务列表(IP+Port),然后通过IP+Port访问服务,同时在Client侧会做Load Balance、错误重试;
5)Portal通过域名访问Meta Server获取Admin Service服务列表(IP+Port),然后直接通过IP+Port访问服务,同时在Clent侧会做Load Balance、错误重试;
6)为了简化部署,实际上会把Config Serviice、EureKa和Meta Server三个逻辑角色部署在同一个JVM进程中
2.Client架构:
1)客户端和服务端会保持一个长连接,从而能第一时间获取配置更新的推送(通过Http Long Polling实现)
2)客户端还会定时从Apollo配置中心服务端拉去应用的最新配置;
防止推送机制失效配置不更新,客户端定时拉去上报本地版本,所以一般情况下,对于定时拉取的操作,服务端会返回304没有发生改变;定时频率默认为5分钟拉取一次,
客户端也可以在运行时指定System Property:apollo.refreshInterval来覆盖,单位为分钟;
3)客户端从Apollo配置中心服务端获取应用的最新配置后,会保存在内存中;
4)客户端会把服务从服务端获取到的配置在本地文件系统缓存一份;
在遇到服务不可用或者网络不通的时候,依然能从本地恢复配置;
5)应用程序可以从Apollo客户端获取最新的配置、订阅配置更新通知;
3.实现服务部署方案: