当前位置: 首页 > news >正文

【Nacos】负载均衡

目录

      • 前言
    • 一、服务下线
    • 二、权重配置
    • 三、同一个集群优先访问
    • 四、环境隔离

前言


我们的生产环境相对是比较恶劣的,我们需要对服务的流量进行更加精细的控制.Nacos支持多种负载均衡策略,包括配置权重同机房同地域同环境


一、服务下线

当某一个节点上接口的性能较差时,我们可以第一时间对该节点进行下线

操作步骤: 服务详情 -> 下线
在这里插入图片描述
在这里插入图片描述

点击下线以后,我们再请求该服务接口,会发现没有服务请求出来了

此处我们的order服务远程调用了product服务,但由于下线了9091端口的实例,所以导致它接收不到请求,所以右边的日志也没有变化
在这里插入图片描述

再次单击上线,该节点就会继续接收请求
在这里插入图片描述


二、权重配置

我们也可以通过配置节点的流量权重,来解决某些节点性能较低的问题

  1. 操作步骤:找到对应节点-编辑->在弹出的窗口修改权重
    在这里插入图片描述

  2. 光在nacos服务端上配置了还不够,由于SpringcloudLoadBalance组件自身有负载均衡配置方式,所以不支持Nacos的权重属性配置我们需要开启Nacos的负载均衡策略,让权重配置生效

spring:cloud:loadbalancer:nacos:enabled: true

配置完成后我们重新启动服务,再多次发送请求:
在这里插入图片描述
在这里插入图片描述
通过观察我们可以发现刚才配置了权重为0.1的9091节点处理的请求数明显比9092的要少

可能出现的问题:

当修改权重时,可能会出现报错,报错信息可能如下

caused: errCode: 500, errMsg: do metadata operation failed ;caused:
com.alibaba.nacos.consistency.exception.ConsistencyException: The Raft Group
[naming_instance_metadata] did not find the Leader node;caused: The Raft Group
[naming_instance_metadata] did not find the Leader node;

原因:Nacos采用raft算法来计算Leader,并且会记录前一次启动的集群地址,当服务器IP改变时会导致raft记录的集群地址失效,导致选Leader出现问题.(网络环境发生变化时,IP地址也会发生变化

解决办法:删除Nacos根目录下data文件夹下的protocol文件夹即可


三、同一个集群优先访问

Nacos把同一个机房内的实例,划分为一个集群.所以同集群优先访问,在一定程度上也可以理解为同机房优先访问

微服务架构中,一个服务通常有多个实例共同提供服务,这些实例可以部署在不同的机器上,这些机器可以分布在不同的机房,比如product-service:

实例1:分布在上海机房
实例2:分布在北京机房
实例3:分布在北京机房
在这里插入图片描述

微服务访问时,应尽量访问同机房的实例.当本机房内实例不可用时,才访问其他机房的实例

比如order-service在上海机房,product-service在北京和上海机房都有实例,那我们希望可以优先访问上海机房,如果上海机房没有实例,或者实例不可用,再访问北京机房的实例通常情况下,因为同一个机房的机器属于一个局域网,局域网访问速度更快一点

在这里插入图片描述
给实例配置集群名称:
在这里插入图片描述
将前两个服务配置文件添加spring.cloud.nacos.discovery.server-addr.cluster-name项配置集群名称:

spring:cloud:loadbalancer:nacos:enabled: truenacos:discovery:server-addr: http://120.26.87.94:10020/cluster-name: SH #上海

后面两个复制出来的服务我们也来配置一下他们的集群名称:
在这里插入图片描述
在这里插入图片描述
修改完毕后启动服务器,查看Nacos管理界面

此时我们9090端口的product服务就是在SH集群上的,而9091和9092在BJ集群上
在这里插入图片描述
而我们的订单服务此时是配置在SH集群的
在这里插入图片描述
此时在频繁发起请求,就会发现只有9090端口的服务收到了请求,因为它和订单服务属于同一个集群
在这里插入图片描述


四、环境隔离

企业开发中,一个服务会分为开发环境,测试环境和生产环境.

  1. 开发环境:开发人员用于开发的服务器,是最基础的环境.一般日志级别设置较低,可能会开启一些调试信息.
  2. 测试环境:测试人员用来进行测试的服务器,是开发环境到生产环境的过渡环境.
  3. 生产环境:正式提供对外服务的环境,通常关掉调试信息.

通常情况下,这几个环境是不能互相通信的.Nacos提供了namespace(命名空间)来实现环境的隔离.

不同的namaspace的服务不可见.

默认情况下,所有服务都在同一个namespace,名为public

创建Namespace:
在这里插入图片描述
配置服务的namespace”:

配置项Key默认值说明
命名空间spring.cloud.nacos.discovery.namespace常用场景之一是不同环境的注册的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等.

在这里插入图片描述

spring:cloud:nacos:discovery:namespace: #命名空间id

在这里插入图片描述
我们现在将order-service的命名空间配置为dev, product-service的命名空间配置为test, 然后重启服务观察:

现在order-service已经在dev这个命名空间下了

而所有的product-service都在test里了

在这里插入图片描述
在这里插入图片描述
测试接口:

此时因为我们的order-service在它所在的命名空间里没有product-service的服务实例,导致远程调用就失败

在这里插入图片描述
查看报错日志:
在这里插入图片描述


在这里插入图片描述

相关文章:

【Nacos】负载均衡

目录 前言 一、服务下线二、权重配置三、同一个集群优先访问四、环境隔离 前言 我们的生产环境相对是比较恶劣的,我们需要对服务的流量进行更加精细的控制.Nacos支持多种负载均衡策略,包括配置权重,同机房,同地域,同环…...

小智 AI 聊天机器人

小智 AI 聊天机器人 (XiaoZhi AI Chatbot) 👉参考源项目复现 👉 ESP32SenseVoiceQwen72B打造你的AI聊天伴侣!【bilibili】 👉 手工打造你的 AI 女友,新手入门教程【bilibili】 项目目的 本…...

HTML一般标签和自闭合标签介绍

在HTML中,标签用于定义网页内容的结构和样式。标签通常分为两类:一般标签(也称为成对标签或开放闭合标签)和自闭合标签(也称为空标签或自结束标签)。 以下是这两类标签的详细说明: 一、一般标…...

怎么用u盘怎么重装系统_用u盘重装系统详细图文教程【新手教程】

怎么用u盘怎么重装系统?如果需要重装操作系统的话,以往采用光盘使用的比较多,随着技术的进步,用u盘制作一个启动盘安装系统比较方便,只需要用u盘制作好pe启动盘就可以帮助别人安装系统了,那么用u盘怎么重装…...

记录一次k8s起不来的排查过程

我在k8s集群,重启了一个node宿主机,竟然发现kubelet起不来了!报错如下 这个报错很模糊,怎么排查呢。这样,开两个界面,一个重启kubelet,一个看系统日志(/var/log/message:centos,/va…...

代码练习2

求数组中的第二大值 #include <stdio.h> #include <stdlib.h> int main() {int arr[10]{1,9,2,8,7,3,4,6,5,10};int first, second,i;if (arr[0] > arr[1]) {first arr[0];second arr[1];} else {first arr[1];second arr[0];}for(i 2; i < 10; i) {if…...

2.1.3 第一个工程,点灯!

新建工程 点击菜单栏左上角&#xff0c;新建工程或者选择“文件”-“新建工程”&#xff0c;选择工程类型“标准工程”选择设备类型和编程语言&#xff0c;并指定工程文件名及保存路径&#xff0c;如下图所示&#xff1a; 选择工程类型为“标准工程” 选择主模块机型&#x…...

Qt Designer and Python: Build Your GUI

1.install pyside6 2.pyside6-designer.exe 发送到桌面快捷方式 在Python安装的所在 Scripts 文件夹下找到此文件。如C:\Program Files\Python312\Scripts 3. 打开pyside6-designer 设计UI 4.保存为simple.ui 文件&#xff0c;再转成py文件 用代码执行 pyside6-uic.exe simpl…...

蓝桥杯LQ1044 求完数

题目描述 因子&#xff1a;因子也叫因数&#xff0c;例如3515&#xff0c;那么3和5是15的因子。 同时15115&#xff0c;那么1和15也是15的因子。 1&#xff0c;3&#xff0c;5&#xff0c;15 这四个因子是15的所有因子。 完数&#xff1a;如果一个数等于不含它本身的其他因子之…...

消息队列篇--通信协议篇--TCP和UDP(3次握手和4次挥手,与Socket和webSocket的概念区别等)

1、TCP和UDP概述 TCP&#xff08;传输控制协议&#xff0c;Transmission Control Protocol&#xff09;和UDP&#xff08;用户数据报协议&#xff0c;User Datagram Protocol&#xff09;都算是最底层的通信协议&#xff0c;它们位于OSI模型的传输层。*传输层的主要职责是确保…...

YOLOv9改进,YOLOv9检测头融合ASFF(自适应空间特征融合),全网首发

摘要 一种新颖的数据驱动的金字塔特征融合策略,称为自适应空间特征融合 (ASFF)。它学习了在空间上过滤冲突信息以抑制不一致的方法,从而提高了特征的尺度不变性,并引入了几乎免费的推理开销。 # 理论介绍 目标检测在处理不同尺度的目标时,常采用特征金字塔结构。然而,…...

Elastic Agent 对 Kafka 的新输出:数据收集和流式传输的无限可能性

作者&#xff1a;来 Elastic Valerio Arvizzigno, Geetha Anne 及 Jeremy Hogan 介绍 Elastic Agent 的新功能&#xff1a;原生输出到 Kafka。借助这一最新功能&#xff0c;Elastic 用户现在可以轻松地将数据路由到 Kafka 集群&#xff0c;从而实现数据流和处理中无与伦比的可扩…...

论文速读|Is Cosine-Similarity of Embeddings Really About Similarity?WWW24

论文地址&#xff1a; https://arxiv.org/abs/2403.05440 https://dl.acm.org/doi/abs/10.1145/3589335.3651526 bib引用&#xff1a; inproceedings{Steck_2024, series{WWW ’24},title{Is Cosine-Similarity of Embeddings Really About Similarity?},url{http://dx.doi.o…...

Midjourney中的强变化、弱变化、局部重绘的本质区别以及其有多逆天的功能

开篇 Midjourney中有3个图片“微调”&#xff0c;它们分别为&#xff1a; 强变化&#xff1b;弱变化&#xff1b;局部重绘&#xff1b; 在Discord里分别都是用命令唤出的&#xff0c;但如今随着AI技术的发达在类似AI可人一类的纯图形化界面中&#xff0c;我们发觉这样的逆天…...

基于 Node.js 的天气查询系统实现(附源码)

项目概述 这是一个基于 Node.js 的全栈应用,前端使用原生 JavaScript 和 CSS,后端使用 Express 框架,通过调用第三方天气 API 实现天气数据的获取和展示。 主要功能 默认显示多个主要城市的天气信息 支持城市天气搜索 响应式布局设计 深色主题界面 优雅的加载动画 技术栈 …...

时序数据库的使用场景

文章目录 前言一、特点二、工作原理三、常见的时序数据库四、使用场景优势总结 前言 时序数据库&#xff08;Time Series Database, TSDB&#xff09; 是一种专门设计用于存储和处理时序数据的数据库。时序数据是指按照时间顺序排列的数据&#xff0c;其中每个数据点通常包含时…...

计算机的错误计算(二百二十二)

摘要 利用大模型化简计算 实验表明&#xff0c;虽然结果正确&#xff0c;但是&#xff0c;大模型既绕了弯路&#xff0c;又有数值计算错误。 与前面相同&#xff0c;再利用同一个算式看看另外一个大模型的化简与计算能力。 例1. 化简计算摘要中算式。 下面是与一个大模型的…...

ThinkPHP 8模型与数据的插入、更新、删除

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用VS Code开发ThinkPHP项目-CSDN博客 编程与应用开…...

c语言函数(详解)

目录 前言 一、函数的基本概念和作用 二、函数的声明和定义 三、函数参数的传递方式 四、函数的递归 五、函数指针 总结 前言 本文主要讲解了c语言函数方面的内容 函数的定义和调用函数的返回值和参数函数的作用域和生命周期 函数的声明和定义 函数声明和函数定义的区别函数声…...

为AI聊天工具添加一个知识系统 之70 详细设计 之11 维度运动控制的应用:上下文受控的自然语言

本文要点 要点 前面我们 讨论了 “维度”及其运动控制原理 以及 维度控制 如何在中台微服务架构中撑起了“架构师”角色的一片天。下面我们从 “维度”运动控制的一个典型应用场景&#xff1a;受控的自然语言 ”开始讨论。 拼块文字型风格: 维度运动控制下的受控自然语言…...

ios打包:uuid与udid

ios的uuid与udid混乱的网上信息 新人开发ios&#xff0c;发现uuid和udid在网上有很多帖子里是混淆的&#xff0c;比如百度下&#xff0c;就会说&#xff1a; 在iOS中使用UUID&#xff08;通用唯一识别码&#xff09;作为永久签名&#xff0c;通常是指生成一个唯一标识&#xf…...

数组,对象解构,forEach方法,filter方法

数组解构 对象结构 遍历数组 forEach方法 筛选数组 filter方法 渲染商品案例 forEach遍历数组&#xff0c;能得到每个数组中的数据&#xff0c;item是对象中的每个元素 将遍历的数组中每个对象 加到 str 中 将 str 字符串中的 8 个 div 添加到 list盒子中 对象解构并渲染 综…...

PSPNet

文章目录 摘要Abstract1. 引言2. 框架2.1 金字塔池化模块2.2 特征提取器的监督2.3 训练细节 3. 创新点和不足3.1 创新点3.2 不足 参考总结 摘要 PSPNet是一个改进了FCN-8s缺点的语义分割模型&#xff0c;它解决了FCN-8s的缺点——分割不够精细以及没有考虑上下文信息。PSPNet的…...

论文阅读的附录(七):Understanding Diffusion Models: A Unified Perspective(二):公式46的推导

Understanding Diffusion Models: A Unified Perspective&#xff08;二&#xff09;&#xff1a;公式46的推导 文章概括要推导的公式1. 条件概率的定义2. 联合分布的分解2.1 联合分布的定义2.2 为什么可以这样分解&#xff1f;2.3 具体意义 3. 分母的分解&#xff1a;边际化规…...

BGP分解实验·12——配置路由反射器

当一个AS包含多个iBGP对等体时&#xff0c;路由反射器&#xff08;Route-Reflector&#xff09;非常有用&#xff0c;因为相对于iBGP路由反射器指定的客户端只需要和路由反射器建立邻居关系&#xff0c;从而降低了iBGP全互连的连接数量。路由反射器&#xff08;RR&#xff09;和…...

PCIe 个人理解专栏——【2】LTSSM(Link Training and Status State Machine)

前言&#xff1a; 链路训练和状况状态机LTSSM&#xff08;Link Training and Status State Machine&#xff09;是整个链路训练和运行中状态的状态转换逻辑关系图&#xff0c;总共有11个状态。 正文&#xff1a; 包括检测&#xff08;Detect&#xff09;&#xff0c;轮询&…...

cmake 编译QT之JKQtPlotter-4.0.3

cmake 编译 JKQtPlotter-4.0.3 1.下载源码 源码地址&#xff1a;https://github.com/jkriege2/JKQtPlotter 2.编译 mkdir build cd buildDCMAKE_PREFIX_PATH指编译器目录 D:\ProgramFiles\cmake-3.25.0-rc1-windows-i386\bin\cmake.exe -G "Visual Studio 16 2019&qu…...

【C】memory 详解

<memory.h> 是一个 C 标准库头文件&#xff0c;提供了一组内存管理函数&#xff0c;用于分配、释放和操作动态内存。这些函数主要操作的是未初始化的内存块&#xff0c;是早期 C 编程中常用的内存操作工具。 尽管在现代 C 编程中更推荐使用<cstring>或<memory&…...

Python 爬虫 - Selenium 框架

Python 爬虫 - Selenium 框架 安装安装 Selenium安装 WebDriver 操作浏览器打开浏览器普通方式加载配置方式Headless 方式 设置浏览器窗口最大化显示最小化显示自定义大小 前进后退前进后退 元素定位根据 id 定位根据 name 定位根据 class 定位根据标签名定位使用 CSS 定位使用…...

mysql的having语句

MySQL的HAVING语句用于在GROUP BY子句对数据进行分组后&#xff0c;过滤满足特定条件的组。与WHERE子句不同&#xff0c;HAVING子句可以在过滤条件中使用聚合函数&#xff0c;而WHERE子句则不能。通常&#xff0c;HAVING子句与GROUP BY子句一起使用&#xff0c;以实现对分组数据…...