Apollo(阿波罗)配置中心

Apollo(阿波罗)配置中心:

采用分布式架构,它能够集中管理不同环境、不同集群的配置,配置修改后能够实时推送到应用端,有可视化界面 和 规范的权限,支持 版本管理、灰度发布、监控 等功能。

主要模块及功能:

AdminService:服务于管理界面。提供配置管理、配置修改发布

ConfigService:服务于客户端。配置获取、配置推送

Client:应用客户端,获取应用配置,支持实时更新。通过MetaServer获取ConfigService的服务列表,使用客户端软负载SLB方式调用ConfigService

Portal:配置管理界面。通过MetaServer获取AdminService的服务列表,使用客户端软负载SLB方式调用AdminService

Eureka:服务注册、发现。Config/AdminService注册实例并定期报心跳,和ConfigService组在一起部署

MetaServer:

NginxLB:

配置更新流程

Portal(发布)  ——> AdminService(保存)  ——>  ConfigDB(ReleaseMessage)  <—— (读取)ConfigService(通知) <—— > (拉)Client

1、用户首先在 Portal 管理界面操作配置发布

2、Portal 调用 Admin Service 的接口操作发布

3、Admin Service 在配置发布后会往 ReleaseMessage 表插入一条消息记录(AppId+Cluster+Namespace)

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

5、客户端会发起一个HTTP请求到 Config Service 的notifications/v2接口,建立60s的长连接,当做监听器

6、Config Service 如果发现有新的消息记录,就会通知 AppId+Cluster+Namespace给所有的消息监听器,监听器接口返回变化的配置的 Namespace 给客户端。

监听器如果在 60 秒内没有得到客户端关心的配置发布,会返回 HTTP 状态码 304给客户端,客户端再次重试

7、客户端再立即请求 Config Service 获取该 Namespace 的最新配置。

8、此外,Apollo 提供了容错机制,防止长连接的推送机制失效 导致配置无法更新,客户端会定时主动向 Apollo 拉取配置,该定时频率默认为 5 分钟

ConfigService/AdminService/ConfigDB 三者在每个环境 (DEV/FAT/UAT/PRO) 中都要部署一份。

一套 Portal 就可以集中管理多套环境 (DEV/FAT/UAT/PRO) 中的配置。

Eureka 服务注册中心:ConfigService注册后 Client 就能找到它; ConfigService注册了,Portal 就能找到它。两个Service定期发送保活心跳。

(一)Apollo 和 Spring Cloud Config  区别

区别点ApolloSpring Cloud Config
配置界面有界面管理不同环境、不同集群配置没有,需要通过 git 操作
生效时间实时

重启生效,或手动refresh 生效;Config 需要通过 Git webhook,加上额外的消息队列才能支持实时生效

版本管理界面上有 发布历史和回滚按钮没有,需要通过git操作
灰度发布支持 灰度给部分实例不支持 
权限审核支持修改、发布权限分离

需要通过 git 仓库设置,不支持权限分离

监控可以看到当前哪些客户端在使用哪些配置不支持
配置获取性能快,通过数据库访问+缓存支持较慢,需要从 git clone repository,然后从文件系统读取
客户端支持原生支持 Java 和 .Net 应用;提供 API 支持其它语言应用支持 Spring 应用,提供 annotation 获取配置

(二)为什么用 Eureka 作为服务注册中心,而不是使用传统的 zookeeper

(1)和Spring Boot、Spring Cloud 集成比较方便。

(2)Eureka 可以在 应用自身的容器中启动,即是服务提供者,也充当了Eureka 的角色, 极大的提高了服务的可用性。

(3)完整的服务注册、发现。

参考资料:

  • Apollo Wiki
  • Apollo配置中心介绍
  • 安装使用1
  • 安装使用2

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

早期零撸项目,预注册即将截止, AI身份项目GenomeFi明牌空投教程

简介&#xff1a;GenomeFi基金会旨在用个人基因信息推动生物产业发展&#xff0c;他们通过AI大数据平台和区块链技术验证身份、保护个人信息、提升收入。GenomeFi和CLINOMICS&#xff08;一家基于基因组学疾病早期诊断的领先公司&#xff09;合作提供基因诊断、早期疾病检测、个…

朋友圈之于私域的意义

朋友圈作为社交媒体的一种&#xff0c;是品牌主进行私域流量营销的主要载体&#xff0c;具有推动产品销售、传播信息等多种作用。具体来说&#xff0c;朋友圈在私域中的意义可以体现在以下几个方面&#xff1a; 1. 传播信息&#xff1a;朋友圈可以成为品牌主向其潜在客户传递信…

面试算法-63-全排列

题目 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 解 class Solution {public List&l…

前端学习笔记|CSS基础

css学习 中文学习网站 https://www.w3school.com.cn/ 非语义化的标签 1.div 2.span 类型选择器 类型选择器有时也叫做“标签名选择器*”*或者是”元素选择器“&#xff0c;因为它在文档中选择了一个 HTML 标签/元素 类选择器 类选择器以一个句点&#xff08;.&#xff…

Leetcode 202:快乐数

编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1&#xff0c…

2024年运维相关面试题

SLA 关键词 负责系统的 SLA 代码维护、迭代更新&#xff0c;保证任务质量和交付及时性&#xff1b;推动提升服务的可靠性、可扩展性以及性能优化&#xff0c;保障系统 SLA为系统提供基础设施 SLA 保障 SLA保障&#xff1a;服务质量保障 sla 保障建设&#xff0c;目前一是将故…

代码随想录阅读笔记-字符串【重复的子字符串】

题目 给定一个非空的字符串&#xff0c;判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母&#xff0c;并且长度不超过10000。 示例 1: 输入: "abab"输出: True解释: 可由子字符串 "ab" 重复两次构成。 示例 2: 输入: "aba…

爬虫入门系列-HTML基础语法

&#x1f308;个人主页&#xff1a;会编辑的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” HTML基础语法 bs4解析比较简单&#xff0c;但是呢&#xff0c;首先你需要了解一丢丢的html知识&#xff0c;然后再去使用bs4去提取&#xff0c;逻辑和编写难度就会非常简…

【笔试】银行校招,信息科技岗 金融科技岗笔试准备方向

【笔试】银行校招&#xff0c;信息科技 & 金融科技岗笔试准备方向 文章目录 1、银行招聘流程&#xff08;投递&#xff09;2、笔试内容分析&#xff08;笔试&#xff09;3、真题题库&#xff08;BOC&#xff09;3.1 职业能力&#xff08;行测&#xff09;3.2 英语3.3 信息科…

敏捷开发最佳实践:学习与改进维度实践案例之会诊式培养敏捷教练

自组织团队能够定期反思并采取针对性行动来提升人效&#xff0c;但2022年的敏捷调研发现&#xff0c;70%的中国企业在学习和改进方面仍停留在团队级。本节实践案例将分享“会诊式培养敏捷教练”的具体做法&#xff0c;突出了敏捷以人为本的学习和改进&#xff0c;强调了通过人员…

JNI入门学习 管理和配置的工具选择[二]

在Android开发中&#xff0c;你可以使用 CMake 或者 Android.mk 来编写 JNI 的代码。这两者都是用来管理和配置 JNI 层代码的工具&#xff0c;选择使用哪一个取决于你的喜好以及项目的需求。 使用 CMake 的优点&#xff1a; 现代性&#xff1a;CMake 是一种现代的、跨平台的构建…

大模型-Prompt-API介绍

GPT-3.5 API 提供了一个名为 openai.ChatCompletion.create() 的端点&#xff0c;您可以使用该端点来与 ChatGPT 进行交互。以下是 openai.ChatCompletion.create() 的详细 API 说明&#xff1a; 请求参数&#xff1a; messages&#xff1a;一个数组&#xff0c;包含对话中的消…

javaweb遇到的servlet问题,jar包问题

有时候会遇到这种问题&#xff0c;有的地方会报红 这是因为这个找不到这个包&#xff0c;这个项目缺少jar包 在tomcat9之前还不是Jakarta这个名字&#xff0c;我的运行环境与服务器是jdk17与tomcat10 解决方法&#xff1a; 在项目结构中&#xff0c;找到模块&#xff0c;再…

nacos 更新报错“发布失败。请检查参数是否正确”

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容起因解决方案结果 &#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介绍 &#x1f31f;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华…

android 网络检测简单方法

如果连接的WiFi没有网络&#xff0c;无法通过简单的网络状态检查来判断其可用性。在这种情况下&#xff0c;你可以尝试使用以下方法来检测当前连接的WiFi是否可用&#xff1a; Ping测试&#xff1a;尝试通过向一个已知的可靠服务器发送Ping请求来检测连接的WiFi是否可用。如果…

随机小案例

一个小案例&#xff1a; function random(n, m) {return Math.floor(Math.random() * (m - n 1)) n;}let randomNumber random(4, 10); // 修正变量名为 randomNumber while (true) {let num prompt(请输入猜想&#xff1a;); // 提示用户输入猜想 if (num randomNumber…

赋能企业发展:亚信安慧AntDB的多维度支持

随着互联网技术的迅猛发展&#xff0c;大数据时代的到来&#xff0c;数据库的需求不断增长。在这样的背景下&#xff0c;国产分布式数据库正逐渐崭露头角&#xff0c;AntDB作为其中的重要代表&#xff0c;也积极参与到了这场竞争中。作为国内的技术创新者&#xff0c;AntDB不仅…

第八篇【传奇开心果系列】Python自动化办公库技术点案例示例:深度解读使用Python库清洗处理从PDF文件提取的文本

传奇开心果博文系列 系列博文目录Python自动化办公库技术点案例示例系列 博文目录前言一、Python清洗处理文本的常见步骤二、使用Python库去除非文本元素示例代码三、使用Python库去除格式化元素的示例代码四、使用Python库去除空白字符示例代码五、使用Python库合并段落和行示…

C#使用LINQ和EF Core

在实际应用中&#xff0c;您可以使用 LINQ 查询 EF Core 来执行各种数据库操作。通过 LINQ&#xff0c;您可以轻松地过滤、排序、分组和连接数据。 要使用LINQ查询EF Core中的数据&#xff0c;您可以按照以下步骤进行操作&#xff1a; 首先&#xff0c;确保您已经安装了 Entit…