【分布式配置中心】聊聊Apollo的安装与具体配置变更的原理

【管理设计篇】聊聊分布式配置中心

之前就写过一篇文章,介绍配置中心,但是也只是简单描述了下配置中心的设计点。本篇从apollo的安装到部署架构到核心原理进一步解读,大概看了下apollo的原理,感觉没有必要深究,所以就不打算写源码分析的文章了。只要了解明白基本设计思路就可以。

部署

整体上来说就是需要启动三个java项目,然后导入两个数据库。

1.创建ApolloPortalDB

通过各种MySQL客户端导入sql/apolloportaldb.sql即可。

2.创建ApolloConfigDB

通过各种MySQL客户端导入sql/apolloconfigdb.sql即可。

3.下载安装包

官方文章 :https://www.apolloconfig.com/#/zh/deployment/quick-start

其中有三个系统,adminservice、configService、portal 将对应的配置文件的数据库修改成自己的。

解压之后,按照如下方式启动,

configService

nohup java -jar apollo-configservice-2.0.1.jar > configservice.log &

adminservice

nohup java -jar apollo-adminservice-2.0.1.jar > adminservice.log &

portal

nohup java -jar apollo-portal-2.0.1.jar > portal.log &

4.访问就可以了

http://localhost:8070/ u/p apollo/admin

具体可以参考官方文档。

架构

在这里插入图片描述
整体上来说有五个角色,apollo客户端 也就是java程序,两个DB、Eureka集群、portal、config service、Admin service

  • config service提供配置的读取、推送功能,服务对象是apollo客户端
  • admin service 提供配置的修改,发布功能。服务对象是apollo portal界面
  • config service和admin service都是多实例,无状态部署,所以需要将自己注册到eureka中

整体流程是这样的。
1.config service服务启动,将服务注册到eureka中。admin service也将自己的服务注册到eureka中。
2.添加修改配置 portal启动,从eureka获取admin service服务实例,当添加修改配置的时候,portal调用admin serice修改配置 config,对应的数据。数据是保存在DB中的。
3.客户端启动的时候,从enurka集群获取到config service服务实例。获取服务配置。

注意,如果我们要修改配置数据的话,如何将数据实时通知给apollo客户端

配置发布后实时推送设计

在这里插入图片描述
其中主要以来的是admin service服务异步通知config service,config service 通知客户端。

发送ReleaseMessage的实现方式

从上面的流程可以看到其实admin Service通知config service变更的通知场景,就是典型的一发一收的场景,可以使用消息队列来解决,但是apollo设计者可能考虑到引入对于的中间件,所以采用了一种定时查询数据表的方式。大概如下:

在这里插入图片描述
其实就是admin service有数据变更的话,都会在release Message表插入新的记录。而config service有一个定时任务,每秒都查询一次数据是否有新增,有新增的话,就通知客户端进行配置更新。

在这里插入图片描述

Config Service通知客户端的实现方式

其实客户端会发起一个HTTP请求到config service的接口,不会立即马上返回,而是在60S内判断,配置又没有变更,没有变更 就返回http 304状态码给客户端。
如果有配置变更,会传入变更配置的namespace信息,同时该请求会立马返回。

客户端从返回的结果中获取到配置变化的name space后,立刻请求config service获取该namespace最新配置
在这里插入图片描述

客户端设计

客户端这边除了通过长连接的方式会更新配置,还有定时从配置中心拉去配置。并且自己本地内存缓存和本地文件也都会存储一份。

在这里插入图片描述

可用性

在这里插入图片描述

技术选型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

本篇简单从部署以及介绍了apollo的实现原理,可以发现对于配置中心来说其底层以来的是数据库进行数据存储的。并且在一般的配置中 push 、pull 、定时 等方式 也都有一定的优缺点。

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

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

相关文章

2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项样题卷③

2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项(高职组) 样题(第3套) 目录 2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项(高职组) 样题(第3套) 模块…

2024黑龙江省职业院校技能大赛暨国赛选拔赛应用软件系统开发赛项(高职组)赛题第1套

2024黑龙江省职业院校技能大赛暨国赛选拔赛 应用软件系统开发赛项(高职组) 赛题第1套 竞赛说明 目录 需要竞赛源码资料可私信博主! 竞赛说明 模块一:系统需求分析 任务1:制造执行MES—质量管理—质检标准&#xff…

FreeRTOS学习--49讲 事件标志位

事件标志位: 用一个bit位来表示事件是否发生,只有0(未发生)和1(已发生)两种状态 事件组:事件组是一组事件标志的集合,一组事件组包含了EventBites_t数据类型的变量,该变量高8未不能作为事件标志,用于存储控…

以一种访问权限不允许的方式做了一个访问套接字的尝试

python -m http.server 启动失败 原因是端口被占用,但是使用 netstat -ano|findstr 8000 却没发现占用,最后发现是hyper-v占用了,要给容器使用。 使用命令 netsh int ipv4 show dynamicport tcp可以查看TCP 动态端口范围的情况。 netsh int…

人机对话--关于意识机器

人机对话——关于意识机器 这段内容是我和《通义千问》的对话。这本身展示的是人工智能的效果,同时这里面的内容也有人工智能相关,与各位分享。 我:阿尼尔赛斯 《意识机器》这本书写的是什么? 通义千问: 阿尼尔赛斯…

❀My排序算法学习之冒泡排序❀

目录 冒泡排序(Bubble Sort):) 一、定义 二、算法原理 三、算法分析 时间复杂度 算法稳定性 算法描述 C语言 C++ 算法比较 插入排序 选择排序 快速排序 归并排序 冒泡排序(Bubble Sort):) 一、定义 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单…

【北亚数据恢复】mysql表被truncate,表数据被delete的数据恢复案例

云服务器数据恢复环境: 华为ECS云服务器,linux操作系统,mysql数据库(innodb引擎)。作为网站服务器使用。 云服务器故障: 在执行mysql数据库版本更新测试时,误将本应该在测试库上执行的sql脚本执…

渗透测试计划模板

引言 1.1 目的 1.2 范围 1.3 参考文档 1.4 术语和定义 系统概述 2.1 系统描述 2.2 系统架构 2.3 技术栈 2.4 相关方 目标与风险评估 3.1 目标设定 3.2 风险评估 3.3 风险优先级排序 测试方法与工具 4.1 黑盒测试方法 4.2 白盒测试方法 4.3 灰盒测试方法 4.4 常用渗透测试工具…

亚马逊云科技Amazon Q,一款基于生成式人工智能的新型助手

近日,亚马逊云科技宣布推出Amazon Q,这是一款基于生成式人工智能(AI)的新型助手,专为辅助工作而设计,可以根据您的业务量身定制。通过连接到公司的信息存储库、代码、数据和企业系统,可以使用Am…

个人游戏启动器 | 游戏数据库 playnite 折腾记录

环境:Windows 11 问题:使用平板串联PC游戏后,需要一个本地的PC启动器 解决办法:使用playnite搭配插件 背景:我是个单机游戏爱好者,因为某些原因,需要串流游玩,需要一个方便手柄操作的…

arkts状态管理使用(@State、@Prop、@Link、@Provide、@Consume、@objectLink和@observed)

一、状态管理 1.在声明式UI中,是以状态驱动视图更新: ①状态(State):指驱动视图更新的数据(被装饰器标记的变量) ②视图(View):基于UI描述渲染得到用户界面 注意: ①…

【零基础入门VUE】VueJS - 模板

✍面向读者:所有人 ✍所属专栏:零基础入门VUE专栏https://blog.csdn.net/arthas777/category_12537076.html 我们在前面的章节中学习了如何在屏幕上以文本内容的形式输出。在本章中,我们将学习如何在屏幕上以 HTML 模板的形式获取输出。 为了…

NLP常见问题

transformer中的attention为什么scaled?-CSDN博客 Transformer模型中的Feed-Forward层的作用_transformer feed-forward解释-CSDN博客 关于ChatGPT:GPT和BERT的差别(易懂版) Index - 算法工程师笔记 Transformer模型中,decod…

什么是AI PC,又有哪些产品

最近一段时间,AI PC成为一个流行词。Intel在发布Core Ultra处理器的时候,直接使用了AI PC这个词语,而各大厂商发布相应的笔记本产品时,也使用了AI Ready的宣传词。而在Intel之前,AMD在发布自己的新一代APU的时候&#…

Linux中安装了openjdk后jps command not found

一、问题场景 在Linux中用yum安装了openjdk-17,也在.bashrc中配置了环境变量JAVA_HOME以及bin目录的PATH。 但是在运行jps命令时依然报错找不到命令 二、原因分析 进入到$JAVA_HOME/bin目录查看,发现只有寥寥几个命令,压根没有jps命令&…

《现代操作系统》第十二章习题答案

计算机硬件的改进主要归功于更小的晶体管。一些限制因素包括:(a) 光的波动性可能限制传统光刻技术制造集成电路的能力,(b) 固体中个别原子的迁移性可能导致非常薄的半导体、绝缘体和导体层的性能退化,(c) 背景辐射活性可能破坏分子键或影响非…

ARCGIS PRO SDK GeometryEngine处理独立几何图形

1、面积类:pol为Polygon 1).Area:获取几何图形的面积。这是使用二维笛卡尔数学来计算面积的平面测量 double d GeometryEngine.Instance.Area(pol) 2).GeodesicArea:获取几何图形的椭球面积 …

【Redis-08】Redis主从复制的实现原理

在Redis中,可以通过slaveof命令或者设置slaveof选项实现两台Redis服务器的主从复制,比如我们有两个Redis机器,地址分别是 127.0.0.1:6379 和 127.0.0.1:6380,现在我们在前者上面执行: 127.0.0.1:6379 > SLAVEOF 12…

DDD系列 - 第8讲 仓库Repository - JPA篇(二)

目录 三、领域层定义仓库Repository接口3.1 ID生成策略3.2 内置方法的使用3.3 关于Specification的使用3.4 通过方法名定义查询3.5 自定义SQL(跨聚合)3.5.1 @NameQuery & @NamedNativeQuery3.5.2 @Query3.5.3 @Query.nativeQuery3.5.4 @Query & @Modifying3.5.5 @Que…

图片预览 element-plus 带页码

vue3、element-plus项目中&#xff0c;点击预览图片&#xff0c;并显示页码效果如图 安装 | Element Plus <div class"image__preview"><el-imagestyle"width: 100px; height: 100px":src"imgListArr[0]":zoom-rate"1.2":max…