微服务系列(5)- Nacos负载均衡与环境隔离

1.Nacos负载均衡

1.1 集群负载均衡

我们通过修改启动参数新添加一个实例 :

image-20220421145052396

参数如下 :

-Dserver.port=8083 -Dspring.cloud.nacos.discovery.cluster-name=SH

指定 user-service 的8083的实例集群为上海集群

从Nacos的Web页面我们可以看到, 此时有三个实例, 两个所属杭州集群, 另外两个所属上海集群

image-20220421145203462

默认情况下 Nacos 还是使用的轮询的负载均衡策略, 如果我们想要实现集群优先的负载均衡的话, 就要添加如下配置 :

user-service: # 微服务名称
  ribbon: # 负载均衡规则
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则

如果之前配置过 Eureka 负载均衡规则,只需要修改下即可

配置完成以后, 重启下 order-service , 然后访问 http://localhost:8080/order/101~106

image-20220421150341504

如上图可以看到所有的请求都发送到了SH 集群里 , 这样我们就实现了集群的负载均衡

之所以所有的请求都发送到了SH集群里, 是因为 order-service 的微服务也属于 SH 集群, 一般情况下优先访问同一集群的服务

1.2 权重负载均衡

实际部署中会出现这样的场景:

  • 服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。
  • 但默认情况下NacosRule是同集群内随机挑选,不会考虑机器的性能问题。

因此,Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高。

在nacos控制台,找到 user-service 的实例列表,点击编辑,即可修改权重:

image-20220421151051901

备注 : 如果权重修改为 0,则该实例永远不会被访问

修改后需要注意的是, 上面我们把微服务8083的集群修改为SH, 和order-service微服务的集群一致

这样再次访问, 哪怕修改了权重, 大概率也是访问同一集群内的微服务实例

所以为了区分, 我们把8083的微服务实例集群修改为 BJ

image-20220421151841253

重启微服务, 然后再次访问 http://localhost:8080/order/101~106 查看, 可以看到服务是优先请求权重搞的微服务实例的

2.Nacos环境隔离

2.1 基本概念

Nacos提供了namespace来实现环境隔离功能。

  • nacos中可以有多个namespace
  • namespace下可以有group、service等
  • 不同namespace之间相互隔离,例如不同namespace的服务互相不可见

image-20220421152653828

2.2 NameSpace创建

默认情况下,所有service、data、group都在同一个namespace,名为 public:

image-20220421153214847

我们可以新建一个命令空间 :

image-20220421153257896

创建后是下面这样的, 我们可以通过命名空间ID去配置对应的命名空间

image-20220421153334308

2.3 NameSpace配置

修改 order-service 微服务的application.yml配置 :

spring:
  cloud:
    nacos:
      discovery:
        cluster-name: SH # 配置集群
        namespace: dev-01 # 配置namespace (namespace ID)
      server-addr: localhost:8848

根据上面新建的namespace 自定义的 id , 添加相关配置, 配置完成以后重启微服务

image-20220421154217570

重启以后即可在服务列表的dev命名空间看到, 如上图 但是要注意的是不同命名空间的服务是隔离的

也就是说, 现在 order-service 无法访问到 user-service 微服务了

当我们尝试调用的时候, 就会出现 No instances available for user-service

image-20220421154443792

2.4 服务实例

Nacos的服务实例分为两种类型:

  • 临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。
  • 非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例。

配置一个服务实例为永久实例 :

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: SH # 配置集群
        # namespace: dev-01 # 配置namespace (namespace ID)
        ephemeral: true # 配置实例为永久实例

3. Eureka和Nacos的区别

3.1 共同与差异

image-20220421154856515

Nacos与eureka的共同点

  • 都支持服务注册和服务拉取
  • 都支持服务提供者心跳方式做健康检测

Nacos与Eureka的区别

  • Nacos支持服务端主动检测提供者状态:

    • 临时实例采用心跳模式,非临时实例采用主动检测模式
    • 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
  • Nacos支持服务列表变更的消息推送模式,服务列表更新更及时

  • Nacos集群默认采用AP方式强调服务的可用性

  • 当集群中存在非临时实例时,采用CP模式, 强调数据的可靠性和可用性

  • Eureka采用AP方式

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兀坐晴窗独饮茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值