Nacos的集群配置、NacosRule负载均衡、权重设置、namespace

当我们的服务越来越多,服务实例越来越多(比如说userservice,有8081、8082、8083端口三个实例),我们在同一个机房部署所有的服务很不安全,应对突发状况时,就像鸡蛋放在一个篮子里;很不安全,很不友好,所有我们需要分开部署机房与服务器;

一个服务可以分多个集群部署,一个服务器可以部署多个服务(但是一般不会这么做,一般一台服务器就只部署一个服务实例),一个集群可以有多个实例;
在这里插入图片描述那我们该如何配置集群呢?
在这里插入图片描述
服务启动前,配置好集群属性,再进行启动:
例如:
给userservice配置集群HZ(杭州),启动两个userservice实例:8081、8082,此时这两个实例都部署在HZ集群上
在这里插入图片描述
在这里插入图片描述
此时,再修改集群名,启动一个userservice3,这个实例就部署在SH(上海)集群上了
在这里插入图片描述
可以再Nacos中看到部署的服务实例:
在这里插入图片描述
点击“详情”:可以看到集群和部署的实例
在这里插入图片描述
总结:
在这里插入图片描述

NacosRule负载均衡

以上我们把userservice1(服务提供者)和userservice2(服务提供者)配置在了HZ(杭州)集群,userservice3(服务提供者)配置在了SH(上海)集群。
操作:把orderservice(服务消费者)也部署在HZ集群:
在这里插入图片描述

此时我们的orderservice(服务消费者)也配置到HZ集群,再调用userservice(服务提供者)时,还是会使用默认的轮询算法;且不分集群(userservice1、2、3都会轮询调用);

这是很不明智的,因为现实情况中,当我们在杭州的服务orderservice(服务消费者),要去调用上海的远程服务userservice13,肯定会比同一个集群的userservice1、2更加慢,增加了时间损耗,舍近而求远

那我们要怎么去设置让orderservice(服务消费者)设置默认访问和自己在同一个集群上的服务呢?
这就引出了我们的NacosRule负载均衡:
配置NacosRule负载均衡之后,会优先访问同一集群的服务提供者
在这里插入图片描述
在这里插入图片描述

注意:配置NacosRule之后,请把原来有的Ribbon的负载均衡配置替换、注释或删除,不然Nacos的负载均衡配置无法生效

在orderservice(服务消费者)配置好NacosRule负载均衡之后,会自动调用和自己在同一个集群的服务,也就是userservice1和2,不会调用远程集群的userservice3

在orderservice(服务消费者)调用同一个集群的多个userservice服务实例时,会进行随机访问服务实例;也就是说这里的userservice1和2,会被orderservice随机访问,而3由于不在同一个集群,不会被优先访问。

那如果此时,同一个集群的userservice1、2服务宕机了,orderservice在调用时,本集群没有服务可调时,orderservice会调用不同集群的userservice3吗?
会!但是会有警告:本来访问的HZ集群,但是此时出现了一次跨集群访问,访问了SH集群的userservice3
在这里插入图片描述
总结:
在这里插入图片描述

Nacos服务实例的权重设置

实例的权重控制:
1、Nacos控制台可以设置实例的权重值,0~1之间
2、同集群内的多个实例,权重越高被访问的频率越高
3、权重设置为0则完全不会被访问

在Nacos服务页面可以对每个实例进行权重设置
在这里插入图片描述
Nacos权重设置的一个应用:
场景:假如当前公司要把一个服务进行升级(假设有多个集群 )
以前:以前的做法是等到夜深人静,用户最少的时候,把服务停掉,重启;
缺点是:总有用户在线,停掉服务,用户体验极差
使用Nacos权重:把其中一个服务实例权重设置为0,渐渐地就不会有请求发到这个服务上来,然后停掉这个服务实例,进行重启更新;此时其他服务正常运行,只是压力稍微大一点;然后等这个服务更新完毕,再把其他其他实例如法炮制,依次更新;
好处是:用户感觉不到服务已经更新完毕了,且不需要等到用户少的时候进行更新,避免深夜加班

namespace

Nacos作为服务注册中心,同时也是配置中心
Nacos中的配置文件,隔离从大到小:namespace、Group、service/Data,不同namespace的服务不可以相互访问
在这里插入图片描述

在这里插入图片描述
如果上面的命名空间id不填,则会自动生成:
在这里插入图片描述
设置好namespace之后,在项目配置文件中设置使用哪一个命名空间,需设置namespace的id:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/dayuiicghaid/article/details/126045124