[SpringCloud][11] Nacos 负载均衡,服务下线、权重配置、同集群优先访问

文章目录

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

服务下线

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

操作步骤:服务详情->下线

  • 点击下线后,再次请求接口,会发现该服务没有请求进来了
  • 再次单击上线,该节点会继续收到请求

权重配置

除了下线之外,我们也可以配置这个节点的流量权重

配置权重

操作步骤:找到对应节点->编辑->在弹出的窗口修改权重值

  • 每个节点默认权重为 1,修改为 0.1

开启 Nacos 负载均衡策略

由于 Spring Cloud LoadBalance 组件自身有负载均衡配置方式,所以不支持 Nacos 的权重属性配置

我们需要开启 Nacos 的负载均衡策略,让权重配置生效

yml 复制代码
# 开启 Nacos 的负载均衡策略,让权重配置生效
spring.cloud.loadbalancer.nacos.enable=true

spring: 
  cloud: 
    loadBalancer: 
      nacos:
        enabled: true

测试权重配置

启动服务,访问多次接口,观察结果,会发现 9090 端口的实例接收的请求明显比另外两个实例少

  • 整体流量生效,局部流量不是严格按照设置的比例进行分配的

同集群优先访问

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

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

  • 实例 1:分布在上海机房
  • 实例 2:分布在上海机房
  • 实例 3:分布在北京机房
  • 实例 4:分布在北京机房

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

比如 order-service 在上海机房,product-service 在北京和上海机房都有实例,那我们希望可以优先访问上海机房,如果上海机房没有实例,或者实例不可用,再访问北京机房的实力。

  • 通常情况下,因为同一个机房的机器属于一个局域网,局域网访问速度更快一点

给实例配置集群名称

  1. product-service 配置集群名称
yml 复制代码
spring: 
  cloud: 
  	nacos: 
  		discovery: 
  			server-addr: 127.0.0.1:8848
  			cluster-name: SH  #集群名称:上海集群

重启服务,观察 Nacos 控制台,SH 集群下多了一个实例

复制 product-service 启动配置,添加 VM Option

  • 设置 9091 端口号的实例,机房为 BJ

    -Dserver.port=9091 -Dspring.cloud.nacos.discovery.cluster-name=BJ

  • 设置 9092 端口号的实例,机房为 BJ

    -Dserver.port=9092 -Dspring.cloud.nacos.discovery.cluster-name=BJ

重启服务,观察 Nacos 控制台,BJ 集群下多了一个实例


  1. order-service 配置集群名称:SH
yml 复制代码
spring: 
  cloud:  
  nacos:  
    discovery:  
      server-addr: 127.0.0.1:8848  
      cluster-name: SH  #集群名称:上海集群

开启 Nacos 负载均衡策略

同权重配置

yml 复制代码
# 开启 Nacos 的负载均衡策略
spring:
  cloud: 
    loadBalancer:  
  	  nacos:  
        enabled: true

测试

启动服务

  1. 对接口访问多次,观察日志,会发现只有 9090 端口的实例收到了请求(同集群)
  2. 9090 端口的实例进行下线(SH 集群),再次访问接口,发现 9091 端口和 9092 端口的实例收到了请求
相关推荐
小坏讲微服务9 小时前
Spring AI 高频面试题20道
java·spring·ai·agent·springai
Bs_MoneyMagnet9 小时前
基于springboot+vue的会议室预约管理系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·毕业设计·计算机毕业设计
sunshine22 girl9 小时前
Java学习 java原理
java·开发语言·学习
Bs_MoneyMagnet9 小时前
基于springboot+vue的茶铺管理系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·毕业设计·计算机毕业设计
她说..9 小时前
RabbitMQ 使用场景详解
java·spring boot·后端·spring·rabbitmq·java-rabbitmq
宁渡AI大模型9 小时前
河南宁渡科技有限公司|宁渡课堂 AI 全栈面试分享,AI 应用开发高频考点汇总
java·c++·人工智能·python·深度学习·神经网络·rag
代码什么用9 小时前
JSON一文速通
java·json
Lyyaoo.9 小时前
【二分查找】【中等】搜索二维矩阵/排序数组的第一位和最后位置/搜索旋转排序数组/旋转排序数组中的最小值
java·数据结构·算法
土司大王9 小时前
LeetCode hot100——153.寻找旋转排序数组中的最小值:Java 二分模板与 O(log n) 分析
java·算法·leetcode
磐链科技9 小时前
交易所开发中的合规与安全:KYC、AML、冷热钱包设计要点
java·区块链