彻底理解微服务配置中心的作用
常见的配置中心有SpringCloudConfig、Apollo、Nacos等,理解它的作用,无非两点,一是配置中心能做什么,不使用配置中心会出现什么问题。
作用:配置中心是用来集中管理服务的配置,它是用来提高系统配置的维护性、时效性、安全性。
本文主要通过目前最流行的Nacos来进行分析,先看下图:
一.在微服务架构中,服务少则几十个,多则上百个,在这种状态下,如果还用以前传统的配置文件方式,会出现哪些问题?
1.维护性差:比如说我每个服务比如都连接了Redis,一旦Redis的服务器IP发生了更改,那么就需要把所有服务的配置文件中的Redis配置进行修改,这样的话,维护性非常的差;
2.时效性差:比如Redis配置,先修改了A服务,然后重启A服务,此时B、C、D......等服务都还没有重启,那么就不能保证它的数据一致性,所以我们需要最好的保证它的时效性,也就是说修改完以后,所以服务最好立马感知到并进行重启,这样才能最大程度保证它的时效性,保证了时效性才能保证它们的一致性;
3.安全性差:如果这些配置都维护在本地代码中,开发人员都可以看到,如果碰到恶心的公司不发公司,那么开发人员直接知道Redis、Mysql的远程地址等,直接可以删除跑路(但不建议,最好走仲裁~),这样就有安全隐患。
如果我们把所有配置放在一个Nacos的配置中心里面统一进行管理,那么就可以非常方便的给它做一些配置,比如说双11大促开始,可以给Redis服务切换到性能高的Redis服务器上去,或者说切换到不同的Redis上去等等,还可以动态的去配置一些限流的策略,然后等大促完了后,可以把策略关掉,切回Redis服务,这种情况下不需要修改原本服务的配置,非常方便。
二.有哪些东西可以作为配置?
1.比方说,数据库连接Url,缓存连接ur字符串,数据库的用户名,密码都可以作为配置的字符串,除此之外,还有一些可以动态调整的参数等等(比如说A服务做了集群,一单数据库地址修改,集群的所有服务都需要进行修改,如果有配置中心,就只需要修改配置中心即可,它会让A服务实时的拉取配置);
2.比方说,客户端的超时设置限流规则和降级开关,流量的动态调度;
3.比方说,某个功能只是针对某个地区用户,还有某个功能只在大促的时段开放。
如果这种需要通过静态的方式去配置或者发布的方式去配置,那么响应速度是非常慢,配置修改后,重启了第一台服务,其他服务还没有重启,就对业务存在风脸,如果有一套集中式的配置中心,只需要相关人员在配置中心动态去调整参数,就基本上可以实时或准实时去调整相关对应的业务,所以配置中心在微服务中算是一个举足轻重的组件。
三.微服务是怎么获取到配置中心的数据的,是推还是拉?
了解了 Nacos 的配置管理的功能后,还有一个问题需要弄明白,那就是 Nacos 客户端是怎么实时获取到 Nacos 服务端的最新数据的,其实客户端和服务端之间的数据交互,无外乎两种情况:服务端推数据给客户端和客户端从服务端拉数据,那到底是推还是拉呢,从 Nacos 客户端通Listener 来接收最新数据进行分析,如下图:
每当为一个Nacos客户端配置了配置中心,就会有一个监听器(Listener),这个监听器就会结合一个定时任务实现一个长轮询的缓存池(LongPollingCachePool), 长轮询的缓存池会实时的去Nacos的配置中心拉取数据,会将本地缓存(CacheData)的MD5值和服务端的MD5值(compareMd5)做对比,如果对比不上,就说明发生了变法,一旦发送了变化,就会把新数据拉取(change)过来,然后再存如到CacheData中,然后重新的计算MD5的值,下一次还是继续比对MD5的值,如果比对不上,就说明又发生了变化,就会继续拉取对象的数据存入本地,当CacheData一旦发生了变化,就会触发Listener的回调方法,就是通知服务的配置数据进行相应的改变。
原理:
Nacos 服务端创建了相关的配置项后,客户端就可以进行监听了,客户端是通过一个定时任务来检査自己监听的配置项的数据的,一旦服务端的数据发生变化时,客户端将会获取到最新的数据,并将最新的数据保存在一个 CacheData 对象中,然后会重新计算 cacheData 的 md5 属性的值,此时就会对该 CacheData 所绑定的 Listener 触发 receiveconfginfo(接收配置信息) 回调。
拉的优势:
因为如果用推的方式,服务端需要维持与客户端的长连接(比如推的方式,如果有上百个客户端,一旦发生修改,就需要通知上百个服务,服务端压力就会变大),这样的话需要耗费大量的资源,并且还需要考虑连接的有效性,例如需要通过心跳来维持两者之间的连接(如果服务端和客户端的连接失效,就不会给客户端推),而用拉的方式,客户端只需要通过一个无状态的 http 请求即可定时获取到服务端的数据(这样压力就分发到了每一个Nacos的客户端,减轻服务端压力)。
相关文章:
彻底理解微服务配置中心的作用
常见的配置中心有SpringCloudConfig、Apollo、Nacos等,理解它的作用,无非两点,一是配置中心能做什么,不使用配置中心会出现什么问题。 作用:配置中心是用来集中管理服务的配置,它是用来提高系统配置的维护…...
基于YOLOv8深度学习的智慧农业棉花采摘状态检测与语音提醒系统(PyQt5界面+数据集+训练代码)
智慧农业在现代农业中的应用日益广泛,其核心目标是通过智能化手段实现农业生产的自动化、精准化和高效化,而精准采摘技术作为智慧农业的重要组成部分,正受到越来越多的关注。棉花作为一种经济作物,其采摘过程传统上依赖于人工劳作…...
自动控制原理——BliBli站_DR_CAN
自动控制 2 稳定性分析 极点在左半平面 输入为单位冲击,而拉普拉斯变换为1;因此,开环和闭环系统,研究其传递函数的稳定性就可以了 2.5_非零初始条件下的传递函数_含有初始条件的传递函数 如果一个系统的初始条件不为0࿰…...
使用phpStudy小皮面板模拟后端服务器,搭建H5网站运行生产环境
一.下载安装小皮 小皮面板官网下载网址:小皮面板(phpstudy) - 让天下没有难配的服务器环境! 安装说明(特别注意) 1. 安装路径不能包含“中文”或者“空格”,否则会报错(例如错误提示:Cant cha…...
vue2 pinia 安装与入门
安装 本体 npm install pinia vue2特定 npm install vue/composition-api 持久化存本地 npm install pinia-plugin-persistvue.config.js 不加的话会报错 configureWebpack: { // 在configureWebpack里加上以下modulemodule: {rules: [{test: /\.mjs$/,include: /node_mo…...
路由传参、搜索、多选框勾选、新增/编辑表单复用
前言: 记录添加运动员页面功能的具体实现 ①由赛事管理页面跳转时路由传参(携带该页面表格中莫某条数据对应的赛事id到另一个页面); ②搜索框实时搜索; ③多选框勾选搜索; ④新增表单和编辑表单复用&a…...
内网不出网上线cs
一:本地正向代理目标 如下,本地(10.211.55.2)挂好了基于 reGeorg 的 http 正向代理。代理为: Socks5 10.211.55.2 1080python2 reGeorgSocksProxy.py -l 0.0.0.0 -p 1080 -u http://10.211.55.3:8080/shiro/tunnel.jsp 二:虚拟机配置proxifer 我们是…...
防止按钮被频繁点击
在做开发的时候,不希望按钮被用户频繁点击,给后端服务器增加负担,这个时候,可以在按钮的触发函数加上如下代码: // 禁用按钮 const fetchButton document.querySelector(.btn-fetch); fetchButton.disabled true; // 延时61秒后重新启用按钮 setTimeout(() > { fetchBut…...
Zariski交换代数经典教材Commutative Algebra系列(pdf可复制版)
Zariski的名字估计学代数几何的人都耳熟能详,先是入门时期的交换代数教材,然后就是深入研究时期随处可见的Zariski拓扑。本帖我们分享的便是著名的Zariski交换代数教材。 Oscar Zariski & Pierre Samuel写的交换代数经典教材Commutative Algebra&am…...
【C++】数据类型(上)
C规定在创建一个变量或一个常量时,必须要指定出相应的数据类型,否则无法给变量分配内存 数据类型存在意义:给变量分配合适的内存空间。 1.1 整型 整型作用:整型变量表示的整数类型的数据。 C中能够表示整型类型的有以下几种…...
(C语言) 8大翻译阶段
(C语言) 8大翻译阶段 文章目录 (C语言) 8大翻译阶段⭐前言🗃️8大阶段🗂️1. 字符映射🗂️2. 行分割🗂️3. 标记化🗂️4. 预处理🗂️5. 字符集映射🗂️6. 字符串拼接🗂️7. 翻译&…...
QT QHBoxLayout控件 全面详解
本系列文章全面的介绍了QT中的57种控件的使用方法以及示例,包括 Button(PushButton、toolButton、radioButton、checkBox、commandLinkButton、buttonBox)、Layouts(verticalLayout、horizontalLayout、gridLayout、formLayout)、Spacers(verticalSpacer、horizontalSpacer)、…...
生成式 AI 应用创新引擎dify.ai部署并集成ollama大模型详细图文教程
引言 Dify 是一个开源 LLM 应用开发平台,拥有直观的界面结合了 AI 工作流、RAG 管道、代理功能、模型管理、可观察性功能等,可以快速从原型开发到生产。 Ollama 是一个本地推理框架,允许开发人员轻松地在本地部署和运行 LLMÿ…...
MySQL闪回恢复:轻松应对数据误删,数据安全有保障
在数据库管理中,数据误删是一个常见且棘手的问题。传统的数据恢复方法可能涉及复杂的操作,如全量备份和增量备份的恢复。MySQL的闪回恢复功能提供了一种更为简便、高效的数据恢复手段。本文将详细介绍MySQL闪回恢复的原理、配置和使用方法,帮…...
面经-综合面/hr面
面经-综合面/hr面 概述1.大学期间遇到的困难,怎么解决的2. 大学期间印象最深/最难忘的是什么3. 大学里面担任了什么职务没?做了什么工作?4. 大学最大的遗憾是什么?5. 对自己的未来规划6. 对自己的评价7. 自己的优缺点8. 对公司的认…...
利用Java爬虫获取阿里巴巴中国站跨境属性的详细指南
在全球化贸易的浪潮中,跨境电商正成为连接全球买家和卖家的重要桥梁。阿里巴巴中国站作为全球领先的B2B电子商务平台,提供了海量的商品信息,其中跨境属性信息对于跨境电商尤为重要。本文将详细介绍如何使用Java编写爬虫,从阿里巴巴…...
Vue3.0 所采用的 Composition Api 与 Vue2.x 使用的 Options Api 有什么不同?
Vue 3.0 引入的 Composition API 和 Vue 2.x 中的 Options API 是两种不同的开发方式。它们在组织和管理组件代码的方式上有很大的差异。虽然两者都能实现相同的功能,但 Composition API 提供了更好的灵活性和可维护性,特别是对于复杂的组件和大型项目。 以下是对比这两种 A…...
电脑中的vcruntime140_1.dll文件有问题要怎么解决?一键修复vcruntime140_1.dll
遇到“vcruntime140_1.dll无法继续执行代码”的错误通常表明电脑中的vcruntime140_1.dll文件有问题。这个文件属于Visual C Redistributable,对很多程序的运行至关重要。本文将提供几个步骤,帮助你迅速修复这一错误,使电脑恢复正常工作状态。…...
【网络安全 | 漏洞挖掘】绕过SAML认证获得管理员面板访问权限
未经许可,不得转载。 文章目录 什么是SAML认证?SAML是如何工作的?SAML响应结构漏洞结果什么是SAML认证? SAML(安全断言标记语言)用于单点登录(SSO)。它是一种功能,允许用户在多个服务之间切换时无需多次登录。例如,如果你已经登录了facebook.com,就不需要再次输入凭…...
技能之发布自己的依赖到npm上
目录 开始 解决 步骤一: 步骤二: 步骤三: 运用 一直以为自己的项目在github上有了(之传了github)就可以进行npm install下载,有没有和我一样萌萌的同学。没事,萌萌乎乎的不犯罪。 偶然的机…...
python+django5.1+docker实现CICD自动化部署springboot 项目前后端分离vue-element
一、开发环境搭建和配置 # channels是一个用于在Django中实现WebSocket、HTTP/2和其他异步协议的库。 pip install channels#channels-redis是一个用于在Django Channels中使用Redis作为后台存储的库。它可以用于处理#WebSocket连接的持久化和消息传递。 pip install channels…...
GitHub仓库的README添加视频播放链接和压缩视频网站推荐
想在github的README里面添加视频,有限制,不能超过10MB,所以需要压缩,推荐一个超级厉害的压缩工具,我一个30的视频最后压缩到了3M不到,而且清晰度没有变化,视频压缩网站地址:在线减小…...
PHP学习_1
一.PHP基本语法 1.变量 <?php header("Content-type:text/html;charsetutf-8"); $name1"yanxiao"; $age"3";echo "$name1 今年 $age <br>"; echo "$name1 喜欢 xtf <br>"; echo "$name1 不喜欢英语&…...
深入解析 MySQL 启动方式:`systemctl` 与 `mysqld` 的对比与应用
目录 前言1. 使用 systemctl 启动 MySQL1.1 什么是 systemctl1.2 systemctl 启动 MySQL 的方法1.3 应用场景1.4 优缺点优点缺点 2. 使用 mysqld 命令直接启动 MySQL2.1 什么是 mysqld2.2 mysqld 启动 MySQL 的方法2.3 应用场景2.4 优缺点优点缺点 3. 对比分析结语 前言 MySQL …...
Wordcloud也能生成一个,带html的词云图文件吗??
-------------词云图集合------------- 用WordcloudPyQt5写个词云图生成器1.0 WordCloud去掉停用词(fit_wordsgenerate)的2种用法 通过词频来绘制词云图(jiebaWordCloud) Python教程95:去掉停用词词频统计jieba.tok…...
D2545电动工具调速专用控制电路芯片介绍【青牛科技】
概述: D2545 是一块频率、占空比可调的脉冲控制电路。可通过调节外接的电阻和电容大小来控制输出频率和占空比,达到控制电机转速的作用。 主要特点: ● 电源电压范围宽 ● 占空比可调 ● 静态功耗小 ● 抗干扰能力强 应用: ● …...
【大数据测试之:RabbitMQ消息列队测试-发送、接收、持久化、确认、重试、死信队列并处理消息的并发消费、负载均衡、监控等】详细教程---保姆级
RabbitMQ消息列队测试教程 一、环境准备1. 安装 RabbitMQ2. 安装 Python 依赖 二、基本消息队列中间件实现1. 消息发送模块2. 消息接收模块 三、扩展功能1. 消息持久化和队列持久化2. 消息优先级3. 死信队列(DLQ) 四、并发处理和负载均衡1. 使用 Python …...
Nuclei-快速漏洞扫描器
Nuclei-快速漏洞扫描器 声明 学习内容来自 B 站UP主泷羽sec,如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 ✍Ἷ…...
【MySQL】事务
【MySQL】事务 文章目录 【MySQL】事务前言一、事务的简介二、事务操作三、事务四大特性四、 并发事务问题五、事务隔离级别总结 前言 本篇文章将讲到事务的简介,事务操作,事务四大特性,并发事务问题,事务隔离级别。 一、事务的简…...
Vue 路由回退页面不刷新?深度剖析及实用解决方案汇总
在 Vue 开发过程中,常常会碰到这样一种情形:从页面 A 跳转到页面 B 后,点击浏览器回退按钮返回页面 A 时,页面数据却未刷新,依旧保持之前的状态。这一情况可能会给用户带来困扰,对用户体验产生不良影响。本…...
【JavaEE初阶 — 网络编程】TCP流套接字编程
TCP流套接字编程 1. TCP & UDP 的区别 TCP 的核心特点是面向字节流,读写数据的基本单位是字节 byte 2 API介绍 2.1 ServerSocket 定义 ServerSocket 是创建 TCP 服务端 Socket 的API。 构造方法 方法签名 方法说明 ServerS…...
I.MX6U 裸机开发20. DDR3 内存知识
I.MX6U 裸机开发20. DDR3 内存知识 一、DDR3内存简介1. DDR发展历程SRAMSDRAMDDR1DDR2DDR3DDR4DDR5 2. 开发板资源3. DDR3的时间参数1. 传输速率2. tRCD3. CL 参数作用取值范围工作原理4. tRC参数原理单位与取值5. tRAS重要性及作用 二、I.MX6U MMDC 控制器1. MMDC简介…...
微信小程序常用全局配置项及窗口组成部分详解
微信小程序常用全局配置项及窗口组成部分详解 引言 微信小程序作为一种新兴的应用形态,凭借其轻量级、便捷性和丰富的功能,已成为开发者和用户的热门选择。在开发小程序的过程中,了解全局配置项和窗口组成部分是至关重要的。本文将详细介绍微信小程序的常用全局配置项及窗…...
DVWA 在 Windows 环境下的部署指南
目录预览 一、靶场介绍二、前置准备1. 环境准备2.靶场下载 三、安装步骤1.配置Phpstudy2.配置数据库3.配置DVWA4.登入DVWA靶场 四、参考链接 一、靶场介绍 DVWA 一共包含了十个攻击模块,分别是: Brute Force(暴力(破解ÿ…...
JVM:即时编译器,C2 Compiler,堆外内存排查
1,即时编译器 1.1,基本概念 常见的编译型语言如C,通常会把代码直接编译成CPU所能理解的机器码来运行。而Java为了实现“一次编译,处处运行”的特性,把编译的过程分成两部分,首先它会先由javac编译成通用的…...
AI开发-机器学习库-sklearn
1 需求 官网:scikit-learn: machine learning in Python — scikit-learn 1.5.2 documentation scikit - learn(简称sklearn)是一个用于机器学习的开源 Python 库。它建立在NumPy、SciPy和matplotlib之上,提供了丰富的工具用于数…...
Opencv+ROS实现摄像头读取处理画面信息
一、工具 ubuntu18.04 ROSopencv2 编译器:Visual Studio Code 二、原理 图像信息 ROS数据形式:sensor_msgs::Image OpenCV数据形式:cv:Mat 通过cv_bridge()函数进行ROS向opencv转换 cv_bridge是在ROS图像消息和OpenCV图像之间进行转…...
git使用记录与总结
目录 前言 一、git是什么? 二、使用记录 1.git安装 2.git clone 3.-lfs初始化 4.git add 5.git commit 6.git push 相关问题与解决 总结 前言 随着Github、hugging face等平台各种开源代码、模型的广泛使用,个人可以使用git方便的下载代码与…...
uniapp中uni-popup在小程序中滚动穿透问题
uniapp中uni-popup在小程序中滚动穿透问题 官网例子 使用场景,在小程序中一个页面内容很长,点击某一项需要弹框,这个弹框需要定位在一定位置,下面的页面不需要滚动 1.直接在模板中添加 <template><page-meta :page-styl…...
限制账号密码格式的正则表达式来啦
. 代表任意字符 \w 代表字母、数字、下划线 \d 代表数字 指定字符重复1次或者n次,最少1次 ? 指定字符重复0-1次 {n} 只能重复n次 {a,} 最少重复a次 {,a} 最多重复a次 {a,b} 最少重复a次,最多重复b次 \s 空格 | 代表或者 [a-zA-Z0-9]…...
linux下USB设备状态查询
linux下USB设备状态查询 linux下USB设备状态查询 在buildroot RK3568平台上调试USB视频采集时发现,USB设备经常性断开,为发现其断开的规律,编写脚本记录其断开的时间 linux下USB设备状态查询 #周期性查询 USB设备 cat > /usr/bin/usbenq…...
Java 线程池有限大小工作队列 - 不丢弃任务的实现
我们在创建 Java 线程池,无论是用 Executors, ThreadPoolExecutor, 还是 Spring 的 ThreadPoolTaskExecutor, 如果不指定工作队列的大小的话,默认为 Integer.MAX_VALUE(2147483647), 基本不会把它爆满,但是在许多的任务要执行时大量 Runnable…...
GitLab的使用
文章目录 一、什么是GitLab、有什么用、与Jenkins的区别什么是GitLab及其用途GitLab与Jenkins的区别GitLab的CI/CD功能介绍 二、GitLab的安装与配置Linux下GitLab的安装*Linux下GitLab的简单使用 /etc/gitlab/gitlab.rb 的配置GitLab服务器的域名邮箱配置功能优化关闭一些暂时不…...
ffmpeg.js视频播放(转换)
chrome 临时设置SharedArrayBuffer "C:\Program Files\Google\Chrome\Application\chrome.exe" --enable-featuresSharedArrayBuffer 引用的js及相关文件 ffmpeg.min.js ffmpeg.min.js.map ffmpeg-core.js ffmpeg-core.wasm ffmpeg-core.worker.js 以上几个现…...
免费实用在线AI工具集合 - 加菲工具
免费在线工具-加菲工具 https://orcc.online/ sql格式化 https://orcc.online/tools/sql 时间戳转换 https://orcc.online/tools/timestamp Base64 编码解码 https://orcc.online/tools/base64 URL 编码解码 https://orcc.online/tools/url Hash(MD5/SHA1/SHA256…) 计算 h…...
C# 常量
文章目录 前言一、整数常量(一)合法与非法实例对比(二)不同进制及类型示例 二、浮点常量三、字符常量四、字符串常量五、定义常量 前言 在 C# 编程的世界里,常量是一类特殊的数据元素,它们如同程序中的 “定…...
elasticsearch单节点模式部署
原文地址:elasticsearch单节点模式部署 – 无敌牛 欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等 第一步:下载 官方下载地址:Download Elasticsearch | Elastic,可以 wget 直接下载。 命令:wg…...
C#+数据库 实现动态权限设置
将权限信息存储在数据库中,支持动态调整。根据用户所属的角色、特定的功能模块,动态加载权限” 1. 数据库设计 根据这种需求,可以通过以下表设计: 用户表 (Users):存储用户信息。角色表 (Roles):存储角色…...
ubuntu客户端使用飞牛云的smb服务端共享,和ftp记录
ubuntu smb客服端链接 在Ubuntu上设置SMB客户端连接到SMB服务器,你可以使用smbclient工具或者挂载共享目录。以下是使用smbclient和挂载的简单示例: 使用smbclient连接SMB服务器 安装smbclient: sudo apt-update sudo apt-get install smbcli…...
自然语言处理工具-广告配音工具用于语音合成助手/自媒体配音/广告配音/文本朗读-已经解锁了 全功能的 apk包
Android -「安卓端」 广告配音工具用于语音合成助手/自媒体配音/广告配音/文本朗读。 广告配音工具:让您的文字“说话”,在这个快速发展的数字时代,广告配音工具为各种语音合成需求提供了一站式解决方案。无论是自媒体配音、商业广告配音、…...