Apollo配置发布原理解析

📫作者简介:小明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 客户端读取设计原理。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/239554.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ //习题2.5 请写出下列表达式的值。

C程序设计 (第三版) 谭浩强 习题2.5 习题2.5 请写出下列表达式的值。 (1) 3.5 * 3 2 * 7 - ‘a’ (2) 26 / 3 34 % 3 2.5 (3) 45 / 2 (int)3.14159 / 2 (4) a b (c a 6) 设a的初值为3 (5) a 3 * 5, a b 3 * 2 (6) (int)(a 6.5) % 2 …

波奇学Linux:Linux进程状态,进程优先级

编写一个程序模拟进程 查看进程状态 修改代码后发现进程状态为由S变成R R为运行态,S为阻塞态 第一次为S是因为调用了外设(printf调用屏幕外设),实际上应该为R,S状态轮换,但是R太快了,所以每次…

使用docker编排容器

使用Dockerfile构建一个自定义的nginx 首先用docker拉一个nginx镜像 docker pull nginx拉取完成后,编辑一个Dockerfile文件 vim Dockerfile命令如下所示,FROM 后面跟的你的基础镜像,而run则是表示你构建镜像时需要执行的指令,下面的指令意…

python pip 相关缓存清理(windows+linux)

pip会大量缓存,如果全部堆在系统盘,会造成别的无法使用 windows和linux通用 一、linux linux是在命令行操作 1.查看缓存位置 pip cache dir我这里默认是在/root/.cache/pip 2.查看大小 du -sh /root/.cache/pip结果如下: 3.清理&#…

matlab 最小二乘拟合空间直线(方法三)

目录 一、算法原理1、算法过程2、参考文献二、代码实现三、结果展示四、相关链接博客长期更新,GPT与爬虫自重,你也未必能爬到最新版本。 一、算法原理 1、算法过程 空间直线的点向式方程为:

Node.js 事件循环简单介绍

1.简介 Node.js 事件循环是 Node.js 运行时环境中的一个核心机制,用于管理异步操作和回调函数的执行顺序。它基于事件驱动模型,通过事件循环来处理和派发事件,以及执行相应的回调函数。 Node.js 是单进程单线程应用程序,但是因为…

Spring boot注解

1.RestController RestController 注解用于标识一个类,表示该类的所有方法都返回JSON或XML响应,而不是视图页面。它是Controller和ResponseBody的组合 2.RequestMapping RequestMapping 注解用于映射HTTP请求到控制器方法或类。它可以用于类级别和方法级别,用于定…

制造业CRM选型指南:功能、价格与适用性

点击输入图片描述(最多30字) 在产业升级的大背景下,传统制造业数字化转型迫在眉睫。然而,生产制造业在转型过程中难免遇到难题,这时候就需要CRM客户管理系统的帮助。本文就将为您介绍,什么是制造业CRM&…

BearPi Std 板从入门到放弃 - 先天神魂篇(2)(RT-Thread LED PWM驱动)

简介 基于 BearPi Std 板从入门到放弃 - 先天神魂篇(1)(RT-Thread 指令点亮LED) 创建的项目, 添加PWM驱动LED的方式实现呼吸灯功能, 电路板及相关使用到的配件说明 开发板 : Bearpi Std(小熊派标准板) 主芯片: STM32L431RCT6 E53_ST1扩展板/…

buuctf-Misc 题目解答分解82-84

82.从娃娃抓起 汉字编码 有两种一种是GB2312 另一种是五笔输入 带数字的是电报码 电报码在线翻译(国际摩尔斯电码及中文电码) - 千千秀字 解密是人工智能 汉字五笔编码批量查询:86版五笔编码、98版五笔编码、18030版五笔编码;五…

智慧文旅云平台建设方案:PPT全文30页,附下载

关键词:智慧文旅解决方案,智慧文旅建设方案,智慧文旅仓,智慧旅游景区方案,智慧旅游服务平台,智慧旅游技术应用,智慧旅游典型案例 一、智慧文旅云平台建设背景 1、旅游消费升级:随着…

文件搜索项目演示

演示功能搜索功能1:根据文件名搜索2:根据文件路径搜索3:根据文件名拼音(全拼、首拼)搜索 选择更新目录功能自动初始化和定时更新功能程序文件项目知识介绍 演示功能 搜索功能 1:根据文件名搜索 2:根据文件路径搜索 3…

【WebRTC】【Unity】Unity Web RTC1-Unity中简单实现远程画面

【项目资源下载】 本篇配套直接打开可用的项目包地址,欢迎下载: https://download.csdn.net/download/weixin_41697242/88612084 【背景】 想要在Unity中实现实时远程桌面,找到了Render Streaming这个手段,本篇介绍相应的使用方…

Nginx实际问题解决——如何指定地址访问指定页面

Nginx实际问题解决——如何指定地址访问指定页面 问题复现 /var/www/dist/biographicalNotes/下面有一个Html文件 biographicalNotes.html,我实际的nginx代理是这样的 server {listen 8080;server_name localhost;root /var/www/dist;index index.html;location / {try_files…

使用Emscripten开发网页应用的注意事项

一.小心int64 导出C/C函数包含int64 WebAssembly原生(c/c)支持int64位整型数算术运算。 JavaScript只有一种数值类型:number——等同于C语言中的double,JavaScript本质上无法直接表达64位整型数,因此目前的WebAssem…

C++模板类的介绍

C模板类的介绍 C模板类是一种通用编程技术,允许程序员创建可处理多种数据类型的通用类。通过使用模板,我们可以编写一段能够处理不同类型数据的代码,而无需为每一种数据类型单独编写特定的代码。这大大增强了代码的复用性和灵活性。 基本概念…

飞天使-linux操作的一些技巧与知识点2-TCP的三次握手以及四次挥手以及转换状态

文章目录 TCP 的三次握手四次挥手转换状态 TCP 的三次握手 第一次,客户端与服务端建立链接,需要发送请求连接的消息 第二次,服务端接口到数据后,返回一个确认的操作*(至此客户端和服务端链路建立成功) 第三…

binlog+mysqldump恢复数据(误删数据库或者表)

表删除恢复 1、准备数据 首先准备数据库环境,测试数据库为speech1,如下: 为test数据表添加3条记录,如下:三行为新加的记录,添加后将test表删除。 2、恢复数据 查看binlog日志状态 SHOW MASTER STATUS…

汽车服务行业分析:预计2028年将达到38亿元

在推进加快检验机构建设同时,综合评估检验机构数量、分布和检测能力,探索试点汽车 4S 店开展检验,提供维修、保养、车检一体化服务。汽车服务主要是指围绕汽车展开的一系列服务活动,包括维修、美容、金融等,除具有一般…

c/c++ 结构体、联合体、枚举

结构体 结构体内存对齐规则: 1、结构体的第一个成员对齐到结构体变量起始位置偏移量为0的地址处 2、其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。 对齐数:编译器默认的一个对齐数与该成员变量大小的较小值。 vs 中…