java 推送分布式设置_Apollo分布式配置中心

本文介绍了Apollo,一个由携程框架部门研发的分布式配置中心,具备统一管理配置、实时推送、版本管理、灰度发布等特性。详细阐述了Apollo的部署配置、Java接入方法,包括API整合、Spring整合和Spring Boot接入,并解析了其架构设计和配置实时推送的机制。
摘要由CSDN通过智能技术生成

一、apollo是什么

官方文档很全,也很详细,本文是在官网的基础上精简而来作为笔记

1.apollo是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端

2.特性:

1).统一管理不同环境、不同集群的配置

2).配置修改实时生效(热发布)

3).版本发布管理(配置文件回滚)

4).灰度发布

*:点了发布后,只对部分应用实例生效,等观察一段时间没问题后再推给所有应用实例

5).权限管理、发布审核、操作审计

*:对配置的管理分为编辑和发布两个环节

3.发布流程:

7e41df574e00007fb21e062f3305b15a.png

1).用户在配置中心对配置进行修改并发布

2).配置中心通知Apollo客户端有配置更新

3).Apollo客户端从配置中心拉取最新的配置、更新本地配置并通知到应用

二、部署配置

0c3082ae17d6ed1c6f8fb0bc693d4bd6.png

三、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架构

98150fca8a1d3e385316363ebceb2c0d.png

1、Config service提供配置读取、推送等功能, 服务对象是apollo客户端

2、Admin service提供配置修改、发布等功能, 服务对象是portal管理界面

3、Meta server(逻辑角色)主要用于封装eureka服务发现接口(通过http获取服务信息,不需要关心背后实际的服务注册和发现组件)

五、刨根问底

配置发布后实时推送设计

e8cd561cbe6d47a7b70be33282a3f72b.png

1.ReleaMessage

235913ed6ae10d0f84d7f6fc07eadc7b.png

1)、Admin Service在配置发布后会往ReleaseMessage表插入一条消息记录,消息内容就是配置发布的AppId+Cluster+Namespace

2)、Config Service有一个线程会每秒扫描一次ReleaseMessage表,看看是否有新的消息记录

3)、Config Service如果发现有新的消息记录,那么就会通知到所有的消息监听器

2.Config Service通知客户端的实现

a8946c9fbc3291fcbd8a47a80aa91104.png

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.客户端的设计

351d6bd3300bc974636dbe49642bc62e.png

1)、客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送

2)、定时从Apollo配置中心服务端拉取应用的最新配置(默认5分钟,为了防止推送机制失效导致配置不更新)

3)、客户端获取到最新的配置后会保存在内存中,然后同步到本地缓存文件 (网络不通或服务不可用时依然能从本地恢复)

4)、应用程序从apollo客户端中获取最新的配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值