Apollo配置发布原理解析
📫作者简介:小明java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化,文章内容兼具广度、深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公司后端高级工程师。
? ? ? ??
📫 热衷分享,喜欢原创~ 关注我会给你带来一些不一样的认知和成长。
? ? ? ??
🏆 2022博客之星TOP3 | CSDN博客专家 | 后端领域优质创作者 | CSDN内容合伙人
🏆 InfoQ(极客邦)签约作者、阿里云专家 | 签约博主、51CTO专家 | TOP红人、华为云享专家
????????
🔥如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主~?
🍅 文末获取联系 🍅??👇🏻 精彩专栏推荐订阅收藏 👇🏻
专栏系列(点击解锁)
学习路线(点击解锁)
知识定位
全面讲解MySQL知识与企业级MySQL实战 🔥计算机底层原理🔥
本文目录
三、Apollo?Config Service 通知客户端原理
本文导读
本文主要讲解Apollo配置发布原理,深入浅出通俗易懂的说明了Apollo配置发布过程中的,发送 ReleaseMessage 原理、Config Service 通知客户端原理、Client 客户端读取设计原理。
一、Apollo配置发布原理
在配置中心中,一个重要的功能就是配置发布后实时推送到客户端,配置发布的主要过程:
1、用户在Portal操作配置发布
2、Portal调用Admin Service的接口操作发布
3、Admin Service发布配置后,发送 ReleaseMessage?给各个Config Service
4、Config Service?收到ReleaseMessage后,通知对应的客户端?
二、Apollo?发送 ReleaseMessage 原理
Admin Service在配置发布后,需要通知所有的Config Service有配置发布,从而Config Service可以通知对应的客户端来拉取最新的配置。
Admin Service作为producer(生产者)发出消息,各个Config Service作为consumer(消费者)消费消息。通过一个消息队列组件(Message Queue)就能很好的实现Admin Service和Config Service的解耦。
在实现上Apollo为了尽可能减少外部依赖通过数据库实现了一个简单的消息队列。
1、Admin Service在配置发布后会往 ReleaseMessage表 插入一条消息记录,消息内容就是配置发布的 AppId+Cluster+Namespace
2. Config Service有一个线程会每秒扫描一次ReleaseMessage表,看看是否有新的消息记录
3. Config Service如果发现有新的消息记录,那么就会通知到所有的消息监听器,然后调用消息监听类的handleMessage方法(NotificationControllerV2)
4. NotificationControllerV2得到配置发布的AppId+Cluster+Namespace后,会通知对应的客户端
三、Apollo?Config Service 通知客户端原理
消息监听类在得知有配置发布后是如何通知到客户端的?客户端和服务端保持一个长连接,从而能第一时间获得配置更新的推送
1、客户端会发起一个Http请求到Config Service的 notifications/v2 接口(NotificationControllerV2)
2、NotificationControllerV2不会立即返回结果,而是把请求挂起。考虑到会有数万客户端向服务端发起长连,因此在服务端使用了async servlet(Spring DeferredResult)来服务Http Long Polling请求。
3、如果在60秒内没有该客户端关心的配置发布,那么会返回Http状态码304给客户端。
4、如果有该客户端关心的配置发布,NotificationControllerV2会调用DeferredResult的setResult方法,传入有配置变化的namespace信息,同时该请求会立即返回。客户端从返回的结果中获取到配置变化的namespace 后,会立即请求Config Service获取该namespace的最新配置。?
四、Apollo?Client 客户端读取设计
客户端还会定时从 Apollo配置中心服务端拉取应用的最新配置。
这是一个备用机制,为了防止推送机制失效导致配置不更新,客户端定时拉取会上报本地版本,所以一般情况下,对于定时拉取的操作,服务端都会返回304 - Not Modified 定时频率默认为每5分钟拉取一次,客户端也可以通过在运行时指定 System Property(apollo.refreshInterval)来覆盖,单位为分钟。
apollo.refreshInterval=
总结
本文主要讲解Apollo配置发布原理,深入浅出通俗易懂的说明了Apollo配置发布过程中的,发送 ReleaseMessage 原理、Config Service 通知客户端原理、Client 客户端读取设计原理。?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!