Nacos的集群、负载均衡、环境隔离

news/2024/7/9 23:50:10 标签: spring cloud, 微服务, 负载均衡

目录

集群

在user-service的yml文件配置集群

启动服务

负载均衡

order-service配置集群

设置负载均衡

当本地集群的服务挂掉时

访问权重

环境隔离

1、Nacos服务分级存储模型
        一级是服务,例如userservice

        二级是集群,例如杭州或上海
        三级是实例,例如杭州机房的某台部署了userservice的服务器
2、如何设置实例的集群属性
        修改application.yml文件,添加
        spring.cloud.nacos.discovery.cluster-name属性即可
3、NacosRule负载均衡策略
        优先选择同集群服务实例列表
        本地集群找不到提供者,才去其它集群寻找,并且会报警告
        确定了可用实例列表后,再采用随机负载均衡挑选实例

4、实例的权重控制
      Nacos控制台可以设置实例的权重值,0~1之间

      同集群内的多个实例,权重越高被访问的频率越高

      权重设置为0则完全不会被访问

5、Nacos环境隔离
      namespace用来做环境隔离

      每个namespace都有唯一id

      不同namespace下的服务不可见

集群

在user-service的yml文件配置集群

spring:
    cloud :
        nacos:
            server-addr: localhost:8848 # nacos服务端地址
            discovery:
                cluster-name: HZ #配置集群名称,也就是机房位置
server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
    username: root
    password: 1234
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: orderservice #order的微服务名称
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ #集群名称
#        namespace: 8279562b-ce89-420a-b765-f8b2adfdbe49 #命名空间id
mybatis:
  type-aliases-package: cn.itcast.user.pojo
  configuration:
    map-underscore-to-camel-case: true
logging:
  level:
    cn.itcast: debug
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS
#eureka:
#  client:
#    service-url: #eureka地址信息1
#      defaultZone: http://127.0.0.1:10086/eureka
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则:随机。范围:userservice服务
ribbon:
  eager-load:
    enabled: true #开启饥饿加载
    clients:  #指定饥饿加载的服务
      - userservice

启动服务

启动两个user-service 

把集群名改成:SH

再启动第三个user-service

在nacos提供的网址中,可以看到集群名和在集群下的服务

负载均衡

order-service配置集群

这里我们选择配置HZ

cloud:
  nacos:
    server-addr: localhost:8848
    discovery:
      cluster-name: HZ #集群名称
server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
    username: root
    password: 1234
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: orderservice #order的微服务名称
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ #集群名称
#        namespace: 8279562b-ce89-420a-b765-f8b2adfdbe49 #命名空间id
mybatis:
  type-aliases-package: cn.itcast.user.pojo
  configuration:
    map-underscore-to-camel-case: true
logging:
  level:
    cn.itcast: debug
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS
#eureka:
#  client:
#    service-url: #eureka地址信息1
#      defaultZone: http://127.0.0.1:10086/eureka
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则:随机。范围:userservice服务

启动服务,并通过网页请求数据

会发现通过order-service访问的user-service是轮循的方式

设置负载均衡

在order-service中设置负载均衡的IRule为NacosRule,这个规则优先会寻找与自己同集群的服务:

userservice:
ribbon :
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则

server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
    username: root
    password: 1234
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: orderservice #order的微服务名称
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ #集群名称
#        namespace: 8279562b-ce89-420a-b765-f8b2adfdbe49 #命名空间id
mybatis:
  type-aliases-package: cn.itcast.user.pojo
  configuration:
    map-underscore-to-camel-case: true
logging:
  level:
    cn.itcast: debug
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS
#eureka:
#  client:
#    service-url: #eureka地址信息1
#      defaultZone: http://127.0.0.1:10086/eureka
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则:随机。范围:userservice服务

 启动服务,并通过网页请求数据

会发现只有user1和user2会访问数据,因为他们是本地集群(与order一样的集群)。并且它们两个会随机访问。

当本地集群的服务挂掉时

 通过网页进行访问时,仍然成功,但是order-service会出现警告,提示是通过非本地集群(user3)访问的数据。

访问权重

在nacos提供的网站中,调节同一个集群的某个服务的权重,可以改变它访问的次数。

这里改成0.1后,再进行网页的数据请求。

会发现,user2请求10次,而user1才会请求一次。这符合0.1:1的权重

当权重改为0时,将不再访问该服务

环境隔离

在nacos提供的网页中,点击命名空间,点击新建空间,但是改变环境需要再代码里修改

修改order-service的application.yml,添加namespace

spring:
datasource:
url: jdbc:mysql://localhost:3306/ heima?useSSL=falseusername: root
password: 123
driver-class-name: com.mysql.jdbc.Drivercloud :
nacos:
server-addr: localhost:8848discovery:
cluster-name: SH#上海
namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 #命名空间,填ID

server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
    username: root
    password: 1234
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: orderservice #order的微服务名称
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ #集群名称
        namespace: 8279562b-ce89-420a-b765-f8b2adfdbe49 #命名空间id
mybatis:
  type-aliases-package: cn.itcast.user.pojo
  configuration:
    map-underscore-to-camel-case: true
logging:
  level:
    cn.itcast: debug
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS
#eureka:
#  client:
#    service-url: #eureka地址信息1
#      defaultZone: http://127.0.0.1:10086/eureka
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则:随机。范围:userservice服务
ribbon:
  eager-load:
    enabled: true #开启饥饿加载
    clients:  #指定饥饿加载的服务
      - userservice

运行代码后,在nacos网站观察

可以发现order-service已经不在了

点击上放的dev跳转到dev空间

可以看到order-service服务到了这个空间

这时我们再访问网页数据

发现报错

因为已经不是同一个空间了,order已经无法访问不同空间的user

代码文件点击下载icon-default.png?t=N7T8https://pan.baidu.com/s/1AzOYfkotUYA_vNNR6BlZrw?pwd=5vu5

上一篇:Nacos快速入门

下一篇:Nacos和Eureka的区别 


http://www.niftyadmin.cn/n/5201378.html

相关文章

设计模式-命令模式-笔记

“行为变化”模式 在组件的构建过程中,组件行为的变化经常导致组件本身剧烈的变化。“行为变化”模式组件的行为和组件本身进行解耦,从而支持组件行为的变化,实现两者之间的松耦合。 经典模式:Command、Visitor 动机&#xff0…

【论文阅读笔记】CNN-Transformer for Microseismic Signal Classification

【论文阅读笔记】CNN-Transformer for Microseismic Signal Classification 摘要 这篇论文提出了一种名为CCViT的轻量级网络模型,用于快速准确地识别地下传感器采集的煤矿和岩石裂缝的微震信号中由煤矿爆破产生的大量爆破振动信号。这些微震信号与爆破振动信号的波…

代码随想录算法训练营|五十七天

每日温度 739. 每日温度 - 力扣(LeetCode) 压入栈时的元素和栈内的元素比较,有三个情况,栈内元素大于等于压入栈时的元素,此时压入栈内;如果小于压入栈内的元素,先记录result,再在…

腾讯云标准型S5服务器和s6有什么区别?性能哪个强?

腾讯云服务器CVM标准型S5和S6有什么区别?都是标准型云服务器,标准型S5是次新一代云服务器规格,标准型S6是最新一代的云服务器,S6实例的CPU处理器主频性能要高于S5实例,同CPU内存配置下的标准型S6实例要比S5实例性能更好…

基于猕猴Spike运动解码的不同解码方法性能对比

公开数据集中文版详细描述 参考前文:https://editor.csdn.net/md/?not_checkout1&spm1011.2124.3001.6192神经元Spike信号分析 参考前文:https://blog.csdn.net/qq_43811536/article/details/134359566?spm1001.2014.3001.5501神经元运动调制分析 …

基数排序详解(LSD方法+MSD方法+思路+图解+代码)

文章目录 基数排序一、基数排序概念1.LSD排序法(最低位优先法)2.MSD排序法(最高位优先法) 基数排序 一、基数排序 概念 基数排序是一种非比较型整数排序算法 将整数按位数切割成不同的数字,然后按每个位数分别比较 …

我在CSDN开组会1-蒙特卡洛模拟在矿床学的应用展望

各位老师、同学们,大家好。今天组会的内容是蒙特卡洛模拟在矿床学的应用展望。 为什么要讲蒙特卡洛模拟呢,因为我发现在地质学方面已经有不少应用,但是蒙特卡洛模拟延伸的知识太晦涩了,劝退了很多探究者们。因此,计划…

关于计算机丢失MSVCP140.dll是什么意思?MSVCP140.dll缺失的5个解决方案分享

今天我要和大家分享的主题是关于msvcp140.dll缺失的5种修复方法。在我们使用电脑的过程中,有时候会遇到一些错误提示,其中之一就是“msvcp140.dll丢失”。那么,msvcp140.dll究竟是什么?为什么会丢失呢?接下来&#xff…