Nacos 2.x 系列【13】服务权重管理

文章目录

    • 1. 概述
    • 2. 负载均衡器
    • 3. 配置权重
    • 4. 案例演示
      • 4.1 环境搭建
      • 4.2 默认权重
      • 4.3 权重值为零
      • 4.4 权重不一样

1. 概述

Nacos服务管理模块,提供了服务权重管理功能,用于给服务实例设置权重,权重越高,被分配的流量越大,即基于权重的负载均衡。

典型的应用场景:

  • 金丝雀发布:新版本上线时,开放小部分流量入口,即设置较小的权重,然后逐步增加,直到完全上线
  • 根据服务器性能合理分配:性能好的服务器分配更高的权重,性能差的服务器分配较小的权重

2. 负载均衡器

在使用服务权重管理功能之前,需要对应用框架进行梳理,否则会导致流量未按照预期权重进行分配:

  • 是否支持按权重分配流量的负载均衡
  • 是否存在自身的负载均衡配置方式,没有使用Nacos的权重属性进行负载均衡

在之前的案例中使用的是以下技术栈:

  • Spring Cloud Alibaba
  • Spring Cloud Gateway
  • Spring Cloud OpenFign
  • Spring Cloud LoadBalancer

案例相关文档:

  • Nacos 2.x 系列【3】服务注册
  • Nacos 2.x 系列【4】服务发现
  • Nacos 2.x 系列【8】集成 Spring Cloud Gateway

单个服务的流量入口,主要有外部通过网关直接访问,以及其他服务远程调用。例如订单服务,查询订单时,直接通过网关调用订单服务。下单时,通过用户服务远程调用订单服务(不一定是)。简单示意图如下:
在这里插入图片描述
Spring Cloud Gateway和服务发现中,都使用了 Spring Cloud LoadBalancer作为客户端负载均衡器,它负责从注册中心按照负载均衡策略查询可用实例,默认使用的是轮询策略。

        <!--客户端负载均衡器--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>

Spring Cloud LoadBalancer作为官方的应用组件, Spring Cloud Alibaba已经集成了基于Nacos权重的负载均衡,相关源码位置如下:
在这里插入图片描述
ConditionalOnLoadBalancerNacos注解中,有一个开关配置:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@ConditionalOnProperty(value = {"spring.cloud.loadbalancer.nacos.enabled"},havingValue = "true"
)
public @interface ConditionalOnLoadBalancerNacos {
}

所有在Spring Cloud Gateway和服务提供者的应用配置中,都需要添加如下配置,以开启支持基于Nacos权重的负载均衡:

spring:cloud:loadbalancer:nacos:enabled: true

3. 配置权重

权重的取值范围,在官方文档中没有看到相关说明,一般可以自定义一个范围,例如0-100,或者0-1的浮点类型,值越大,权重就越大。

可以通过以下方式进行权重的配置:

  • 控制台服务详情页面(最简单常用)
  • 客户端 SDK
  • Open API

在控制台中,进入服务列表,点击服务详情,在编辑实例页面中,可以配置权重:
在这里插入图片描述
在集成了Spring Cloud Alibaba时,可以在application.yml中配置:

spring:cloud:nacos:# 服务端用户名密码username: nacospassword: nacos# 服务发现discovery:# 命名空间namespace: 0faa0970-1179-4143-8aa2-cac3ee6b42ec# 服务端地址,默认:127.0.0.1:8848server-addr: 127.0.0.1:8848# 服务权重weight: 100

在官方Open API 指南中,可以看到在创建、更新实例时,可以指定权重:
在这里插入图片描述

4. 案例演示

4.1 环境搭建

order-demo订单服务中,创建查询当前启动端口的接口,用于区分当前调用的是哪个服务实例:

@RequestMapping("/order")
@RestController
public class OrderController {@Value("${server.port}")String port;@GetMapping("/getPort")public String getPort() {return port;}
}

user-demo用户服务中,通过Feign调用order-demo

@FeignClient("order-demo")
public interface OrderFeignClient {@GetMapping("/order/getPort")String getPort();
}@RequestMapping("/feign")
@RestController
public class FeignController {@AutowiredOrderFeignClient orderFeignClient;@GetMapping("/getPort")public String getPort() {return orderFeignClient.getPort();}
}

所有服务开启支持基于Nacos权重的负载均衡:

spring:cloud:loadbalancer:nacos:enabled: true

4.2 默认权重

启动所有服务,其中启动了两个order-demo服务实例,启动端口分别为80808081
在这里插入图片描述

查看order-demo服务实例详情,可以看到默认的权重为1
在这里插入图片描述
通过网关,或者通过用户服务远程调用订单服务:

// 网关访问
http://localhost/order-demo/order/getPort
// 用户服务远程调用
http://localhost:9002/feign/getPort

多次访问查看接口返回的端口值,可以看到权重值一样时,默认是随机访问。

4.3 权重值为零

设置8080端口对应服务的权重值为0
在这里插入图片描述
多次访问查看接口返回的端口值,可以看到权重值为零,该实例将不会被访问到。

4.4 权重不一样

设置8080端口对应服务的权重值为9
在这里插入图片描述
多次访问查看接口返回的端口值,可以看到权重值越高,该实例被访问的次数越多。

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

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

相关文章

Altium Designer软件下载安装「专业PCB设计软件」Altium Designer安装包获取!

Altium Designer&#xff0c;这款软件凭借其全面的设计流程覆盖&#xff0c;从概念到实现&#xff0c;都能为电子工程师提供强大的支持。 在硬件设计方面&#xff0c;Altium Designer提供了丰富的元件库和灵活的布局选项&#xff0c;使得工程师能够轻松地进行电路设计&#xff…

uniapp登录成功后跳回原有页面+无感刷新token

uniapp登录成功后跳回原有页面 引言 在C端的页面场景中&#xff0c;我们经常会有几种情况到登录页&#xff1a; 区分需要登录和不用登录的页面&#xff0c;点击需要登录才能查看的页面 已经登录但是超时&#xff0c;用户凭证失效等原因 以上情况可以细分为两种&#xff0c;一…

单片机/嵌入式小白教程—硬件(三)51单片机最小系统

目录 简介 51单片机器件原理图 复位电路 供电电路 晶振电路 下载电路 最小系统原理图 更加方便的51单片机 简介 传统51单片机最小系统包含&#xff1a;复位电路、供电电路、晶振电路、下载电路 51单片机器件原理图 其中&#xff0c; 第9脚&#xff08;RST&#xff09;…

DOM型XSS

前言 什么是DOM型XSS DOM型XSS漏洞是一种特殊类型的XSS,是基于文档对象模型 Document Object Model (DOM)的一种漏洞。 什么是DOM DOM全称Document Object Model,是一个与平台、编程语言无关的接口&#xff0c;它允许程序或脚本动态地访问和更新文档内容、结构和样式&#xff0…

橙派探险记:开箱香橙派 AIpro 与疲劳驾驶检测的奇幻之旅

目录 引子&#xff1a;神秘包裹的到来 第一章&#xff1a;香橙派AIpro初体验 资源与性能介绍 系统烧录 Linux 镜像&#xff08;TF 卡&#xff09; 调试模式 登录模式 第二章&#xff1a;大胆的项目构想 系统架构设计 香橙派 AIpro 在项目中的重要作用 第三章&#xf…

[Redis]String类型

基本命令 set命令 将 string 类型的 value 设置到 key 中。如果 key 之前存在&#xff0c;则覆盖&#xff0c;无论原来的数据类型是什么。之前关于此 key 的 TTL 也全部失效。 set key value [expiration EX seconds|PX milliseconds] [NX|XX] 选项[EX|PX] EX seconds⸺使用…

苏州金龙新V系客车科技助力“粤”动广州

粤动活力新V系&#xff01; 5月23日&#xff0c;苏州金龙新V系智慧客车推介会在羊城广州举行。活动现场展出了4款新V系代表车型&#xff0c;来自广东省旅游客运、道路运输行业的200余位从业者齐聚一堂&#xff0c;共同品鉴、体验了苏州金龙新V系产品的“新、心、芯”魅力。苏州…

如何降本增效获得目标客户?AI企业使用联盟营销这个方法就对了!

AI工具市场正在迅速发展&#xff0c;现仍有不少企业陆续涌出&#xff0c;那么如何让你的工具受到目标群体的关注呢&#xff1f;这相比是AI工具营销人员一直在思考的问题。 为什么AI企业难以获客呢&#xff1f; 即使这个市场正蓬勃发展&#xff0c;也无法保证营销就能轻易成功…

英语学习笔记29——Come in, Amy!

Come in, Amy! 进来&#xff0c;艾米&#xff01; shut v. 关严 区别&#xff1a;shut the door 把门关紧 口语&#xff1a;Shut up! 闭嘴&#xff01;    态度强硬&#xff0c;不礼貌 例句&#xff1a;请不要把门关严。    Don’t shut the door, please. bedroom n. …

STM32-12-OLED模块

STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG STM32-10-定时器 STM32-11-电容触摸按键 文章目录 1. OLED显示屏介绍2. OLED驱动原理3. OLED驱动芯片简介4…

一年收入大几十个的副业兼职,闲鱼新玩法,新手小白可做,无门槛

在开始分享之前&#xff0c;我想先了解一下&#xff0c;大家是否曾在各大公众号上参与过各种打卡活动&#xff1f;比如减肥打卡、英语阅读打卡、考研考公打卡等等。如今&#xff0c;打卡已经成为现代人生活中不可或缺的一部分。无论是学习、健身还是工作&#xff0c;打卡都能有…

MGR集群模拟故障切换

说明&#xff1a; 1、MGR集群搭建起来&#xff0c;但不知道是否能进行启动切换&#xff0c;故要手动模拟故障并且验证 2、停止主库master服务&#xff0c;登录mysql查看MGR是否进行自动切换。 3、主库切换完成以后&#xff0c;手动将宕机的服务器添加到MGR集群中。 一、模拟故障…

2024年3月电子学会青少年软件编程 中小学生Python编程等级考试一级真题解析(选择题)

2024年3月Python编程等级考试一级真题解析 选择题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 1、下列哪个命令&#xff0c;可以将2024转换成2024呢 A、str(2024) B、int(2024) C、float(2024) D、bool(2024) 答案&#xff1a;A 考点分析&…

C#解析JSON的常用库--Newtonsoft.Json

一、库介绍 在C#中&#xff0c;解析JSON的常用库有Newtonsoft.Json&#xff08;也称为Json.NET&#xff09;和 System.Text.Json&#xff08;从 .NET Core 3.0 开始引入&#xff09;。本文主要介绍 Newtonsoft.Json。 二、下载 官网&#xff1a; https://www.nuget.org/pack…

使用 retrievers 在 Elasticsearch 中进行语义重新排序

作者&#xff1a;来自 Elastic Adam Demjen, Nick Chow 什么是语义重新排序&#xff1f; 语义重新排序&#xff08;semantic reranking&#xff09;是一种方法&#xff0c;它允许我们利用快速检索方法的速度和效率&#xff0c;同时在其上分层语义搜索。它还允许我们立即将语义…

【Python】解决Python报错:TypeError: %d format: a number is required, not str

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

STM32定时器及输出PWM完成呼吸灯

文章目录 一、STM32定时器原理1、基本定时器2、通用定时器&#xff08;1&#xff09;时钟源&#xff08;2&#xff09;预分频器PSC&#xff08;3&#xff09;计数器CNT&#xff08;4&#xff09;自动装载寄存器ARR 3、高级定时器 二、PWM工作原理三、控制LED以2s的频率周期性地…

CyberDAO M级共识交流会·西安站圆满落幕:共筑Web3美好未来

CyberDAO M级共识交流会于2024年5月28日在西安隆重举行&#xff0c;这是一场CyberDAO精英汇聚的盛会&#xff0c;以同心共筑&#xff0c;志在必达为主题口号与DAO精英携手并进&#xff0c;共筑CyberDAO美好宏图。CyberDAO的使命是降低WEB3的门槛&#xff0c;帮助用户轻松抓住行…

【微服务】springboot 构建docker镜像多模式使用详解

目录 一、前言 二、微服务常用的镜像构建方案 3.1 使用Dockerfile 3.2 使用docker plugin插件 3.3 使用docker compose 编排文件 三、环境准备 3.1 服务器 3.2 安装JDK环境 3.2.1 创建目录 3.2.2 下载安装包 3.2.3 配置环境变量 2.2.4 查看java版本 3.3 安装maven …

JVM学习-垃圾回收(二)

标记-清除(Mark-Sweep)算法 当堆中的有效内存空间被耗尽的时候&#xff0c;就会停止整个程序(stop the world)&#xff0c;然后进行两项工作&#xff0c;第一项则是标记&#xff0c;第二项是清除 标记&#xff1a;Collector从引用根节点开始遍历&#xff0c;标记所有被引用的…