【配置中⼼----Apollo】Apollo的介绍及使⽤⽅式
环境SpringBoot 2
⼀、Apollo简介
项⽬组最近的项⽬都是使⽤springcloud微服务开发,整个微服务框架中分布式的系统服务、集等等都⾮常的多。
每⼀个服务都有着⾃⼰的配置(包括参数配置、服务器地址配置、功能开关等都能),当配置需要修改的时候就显得异常的⿇烦,传统的通过配置⽂件、数据库配置完全不能满⾜要求。
在这种情况下,诞⽣了很多的统⼀配置的服务,虽然springcloud有⾃⼰的config配置中⼼,但是和携程的apollo相⽐还是太弱了,对⽐之后我们使⽤了Apollo。
Apollo()是携程框架部门研发的开源配置管理中⼼,能够集中化管理应⽤不同环境、不同集的配置,配置修改后能够实时推送到应⽤端,并且具备规范的权限、流程治理等特性。
github上携程开发⼈员对Apollo做了特别细致的介绍,但是对于我们只使⽤springboot进⾏开发的项⽬来说,其实只⽤到了⾥⾯⼀⼩部分内容。
因此我主要将Apollo和Springboot相关的内容整理出来,本⽂⾸先对Apollo进⾏QuickStart简单⼊门介绍以及基于Springboot框架的使⽤。
1.1 Apollo配置中⼼基础模型
1. 开发⼈员在配置中⼼对某些应⽤的配置(就是⼀些键值对的信息)进⾏修改
2. 配置中⼼通知客户端进⾏配置更新(需要注册监听事件)
3. Apollo客户端(应⽤程序)从配置中⼼拉取更新最新配置
1.2 Apollo的总体设计
上图是Apollo的总体设计,从下往上看:
ConfigService(Apollo集成在⼀个jar包中)提供配置的读取,推送功能,Apollo客户端(你的应⽤程序)从这⼉读取配置。
AdminService(Apollo集成在⼀个jar包中)提供配置的修改、发布功能,Apollo Portal(开发⼈员登录的修改配置的系统)调⽤该服务。
ConfigService和AdminService都是多实例服务,需要将它们注册到Eureka中。
在Eureka之上有⼀层MetaServer⽤于封装Eureka的服务发现接⼝。
Client和Portal通过域名访问MetaServer获取ConfigService和AdminService的服务列表(IP+Port),然后直接通过套接字访问服务。
人防战备应急包为了简化部署,实际上会把Configservice、Eureka和MetaServer部署在同⼀个JVM进程中。
1.3 Apollo配置分类
因为对于不同的应⽤,在不同的环境(开发、测试)、不同的集(华东、华北)、不同的命名空间(例如springboot的
application.property⽂件、你⾃⼰⾃定义的myappconfig.property),配置都有可能不同。
所以Apollo⽀持了4个维度管理Key-Value格式的配置(这些都是可以配置的):
application(应⽤)笔记本怎么用
独生子女补贴最新政策2022在springboot的application.property定义appid这个key的value,标识该类型的应⽤。
environment(4种环境)
DEV(开发环境)
FAT(功能测试)
UAT(验收测试)
PRO(⽣产环境)
cluster(集)
namespace(命名空间,其实就是某个应⽤的不同配置⽂件)
1.4 Apollo特性
正是基于配置的特殊性,所以Apollo从设计之初就⽴志于成为⼀个有治理能⼒的配置管理平台,⽬前提供了以下的特性:统⼀管理不同环境、不同集的配置
客户端配置信息监控
提供Java和.Net原⽣客户端
部署简单
1.5 配置获取规则
【本节仅当应⽤⾃定义了集或namespace才需要,如⽆相关需求,可以跳过本节】
在有了cluster概念后,配置的规则就显得重要了。
⽐如应⽤部署在A机房,但是并没有在Apollo新建cluster,这个时候Apollo的⾏为是怎样的?
或者在运⾏时指定了cluster=SomeCluster,但是并没有在Apollo新建cluster,这个时候Apollo的⾏为是怎样的?
接下来就来介绍⼀下配置获取的规则。
1.5.1 应⽤⾃⾝配置的获取规则
当应⽤使⽤下⾯的语句获取配置时,我们称之为获取应⽤⾃⾝的配置,也就是应⽤⾃⾝的application namespace的配置。
Config config = AppConfig();
对这种情况的配置获取规则,简⽽⾔之如下:最热门的职业
1. ⾸先查运⾏时cluster的配置(通过apollo.cluster指定)
2. 如果没有到,则查数据中⼼cluster的配置
3. 如果还是没有到,则返回默认cluster的配置
图⽰如下:
所以如果应⽤部署在A数据中⼼,但是⽤户没有在Apollo创建cluster,那么获取的配置就是默认cluster(default)的。
如果应⽤部署在A数据中⼼,同时在运⾏时指定了SomeCluster,但是没有在Apollo创建cluster,那么获取的配置就是A数据中⼼cluster 的配置,如果A数据中⼼cluster没有配置的话,那么获取的配置就是默认cluster(default)的。
结婚证照片的尺寸Apollo客户端会把从服务端获取到的配置在本地⽂件系统缓存⼀份,当去服务器读取配置失败时,会使⽤本地缓存的。
Mac/Linux: /opt/data/{appId}/config-cache
Windows: C:\opt\data{appId}\config-cache
确保⽬录存在,且应⽤有读写权限。
1.5.2 公共组件配置的获取规则
以FX.Hermes.Producer为例,hermes producer是hermes发布的公共组件。当使⽤下⾯的语句获取配置时,我们称之为获取公共组件的配置。
Config config = Config("FX.Hermes.Producer");
对这种情况的配置获取规则,简⽽⾔之如下:
1. ⾸先获取当前应⽤下的FX.Hermes.Producer namespace的配置
2. 然后获取hermes应⽤下FX.Hermes.Producer namespace的配置
3. 上⾯两部分配置的并集就是最终使⽤的配置,如有key⼀样的部分,以当前应⽤优先
图⽰如下:
通过这种⽅式,就实现了对框架类组件的配置管理,框架组件提供⽅提供配置的默认值,应⽤如果有特殊需求,可以⾃⾏覆盖。
1.6 总体设计
上图简要描述了Apollo的总体设计,我们可以从下往上看:
为什么选择Eureka
为什么我们采⽤Eureka作为服务注册中⼼,⽽不是使⽤传统的zk、etcd呢?我⼤致总结了⼀下,有以下⼏⽅⾯的原因:
小学生科学手抄报Open Source
最后⼀点是开源,由于代码是开源的,所以⾮常便于我们了解它的实现原理和排查问题。
1.7 客户端设计
上图简要描述了Apollo客户端的实现原理:
1. 客户端和服务端保持了⼀个长连接,从⽽能第⼀时间获得配置更新的推送。
2. 客户端还会定时从Apollo配置中⼼服务端拉取应⽤的最新配置。
1. 这是⼀个fallback机制,为了防⽌推送机制失效导致配置不更新
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论