同集群优先
默认的ZoneAvoidanceRule实现
并不能根据同集群优先的规则
来实现负载均衡,Nacos中提供了一个实现叫NacosRule
可以优先从同集群中挑选服务实例
第一步: 在order-service模块
的application.yml文件中添加集群配置属性spring.cloud.nacos.discovery.cluster-name
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ # 集群名称(杭州)
第二步: 在order-service模块
的application.yml文件中给userservice服务
添加同集群优先的负载均衡规则
# 该属性和spring属性同级
userservice: # 给userservice服务配置负载均衡规则
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
第三步: 访问http://localhost:8080/order/101(查询订单)-->http://localhost:8081/user/订单中的用户ID(查询用户)
, 观察服务实例的日志输出
启动userservice服务的三个实例
: 集群名称为HZ
的两个userservice服务实例
看到日志输出,而集群名称为SH
的userservice服务实例
看不到日志输出停掉集群名称为HZ的两个userservice服务实例
: 集群名称为SH
的userservice服务实例
也会输出日志,但orderservice
的控制台提示跨集群访问警告权重占比
实际部署时不同的服务器设备性能有差异(有的性能好,有的性能较差),此时我们更希望性能好的机器承担更多的用户请求
默认情况下NacosRule实现类
负载均衡的规则是同集群内随机挑选(不看机器的性能)
,所以Nacos另外提供了权重配置来控制访问频率(权重越大则访问频率越高)
在Nacos控制台找到userservice服务
的实例,点击编辑即可以修改权重,权重一般是在0-1
之间,权重为0表示该实例永远不会被访问
灰度测试
: 对服务进行版本升级时,可以给刚更新后的该服务设置一个很小的权重,这样就会有一小部分用户来访问该服务,测试该服务是否稳定