Apollo配置发布原理解析

2023-12-13 03:42:59

📫作者简介:小明java问道之路2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化,文章内容兼具广度、深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公司后端高级工程师。

? ? ? ??

📫 热衷分享,喜欢原创~ 关注我会给你带来一些不一样的认知和成长。

? ? ? ??

🏆 2022博客之星TOP3 | CSDN博客专家 | 后端领域优质创作者 | CSDN内容合伙人

🏆 InfoQ(极客邦)签约作者、阿里云专家 | 签约博主、51CTO专家 | TOP红人、华为云享专家

????????

🔥如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主~?


🍅 文末获取联系 🍅??👇🏻 精彩专栏推荐订阅收藏 👇🏻

专栏系列(点击解锁)

学习路线(点击解锁)

知识定位

🔥Redis从入门到精通与实战🔥

Redis从入门到精通与实战

围绕原理源码讲解Redis面试知识点与实战

🔥MySQL从入门到精通🔥

MySQL从入门到精通

全面讲解MySQL知识与企业级MySQL实战

🔥计算机底层原理🔥

深入理解计算机系统CSAPP

以深入理解计算机系统为基石,构件计算机体系和计算机思维

Linux内核源码解析

围绕Linux内核讲解计算机底层原理与并发

🔥数据结构与企业题库精讲🔥

数据结构与企业题库精讲

结合工作经验深入浅出,适合各层次,笔试面试算法题精讲

🔥互联网架构分析与实战🔥

企业系统架构分析实践与落地

行业最前沿视角,专注于技术架构升级路线、架构实践

互联网企业防资损实践

互联网金融公司的防资损方法论、代码与实践

🔥Java全栈白宝书🔥

精通Java8与函数式编程

本专栏以实战为基础,逐步深入Java8以及未来的编程模式

深入理解JVM

详细介绍内存区域、字节码、方法底层,类加载和GC等知识

深入理解高并发编程

深入Liunx内核、汇编、C++全方位理解并发编程

Spring源码分析

Spring核心七IOC/AOP等源码分析

MyBatis源码分析

MyBatis核心源码分析

Java核心技术

只讲Java核心技术

本文目录

本文导读

一、Apollo配置发布原理

二、Apollo?发送 ReleaseMessage 原理

三、Apollo?Config Service 通知客户端原理

四、Apollo?Client 客户端读取设计

总结


本文导读

本文主要讲解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 客户端读取设计原理。?

文章来源:https://blog.csdn.net/FMC_WBL/article/details/134958843
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。