👳我亲爱的各位大佬们好😘😘😘
♨️本篇文章记录的为 NacosRule负载均衡规则 相关内容,适合在学Java的小白,帮助新手快速上手,也适合复习中,面试中的大佬🙉🙉🙉。
♨️如果文章有什么需要改进的地方还请大佬不吝赐教❤️🧡💛
👨🔧 个人主页 : 阿千弟
比如说在分布式的多模块环境开发中,我们有一个服务叫做user-service, 它有多个实例, 这些实例都部署在一个机房里面, 有一天机房突然停电了,那么这个机房的所有实例都会挂掉😧😧😧, 该怎样解决这个问题呢?
@[toc]
服务多级存储模型
Nacos给我们提供了一个这样的服务分级存储模型:
我们可以将一个服务的多个实例部署在多个机房里面:
比方说公司在上海有个机房容纳端口为8081和8082的user-service的实例, 在杭州有个机房容纳端口为8083和8084的user-service的实例, 如果上海的机房停电了, 我们杭州这边的机房还能支撑我们服务的运行, 这就是我们Nacos提供的容灾技术
所以在Nacos的服务分级里面 : 1级是服务, 2级是集群, 3级是实例
为什么Nacos引入这样一个服务分级的模型呢?原来直接通过服务来找实例不好吗?
我们可以这样设想
原来我们都是在本地机房通过局域网的方式本地实例去访问本地实例, 然后如果我们的本地实例挂了才去访问其他机房的实例,这个过程的调用延迟是比较高的. 下面我们来配置实例的集群属性.
配置服务的集群属性配置
pom中添加如下依赖
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: aliyun #集群名称
然后我们再配置 cluster-name: baiduyun,
然后启动, 可以发现确实是有了两个实例和两个集群
一个集群名称是aliyun另一个是baiduyun, 完美
Nacos-NacosRule负载均衡规则
既然我们想要了解Nacos的负载均衡规则,我们就要先进行配置
在pom文件中配置:
xxxservice: # 要做配置的服务名称
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
那么在Nacos集群里面负载均衡规则是咋样的?
NacosRule优先选择本地集群, 然后在本地集群内的多个服务当中它再采用随机方式进行负载均衡, 这就是NacosRule的访问特点了
Nacos根据权重进行负载均衡
有时候我们在服务器上进行服务部署的时候, 可能由于设备问题 : 有的服务器比较新,性能好;有点比较老旧不能那么好用,这时候我们就希望让新的服务器承担更多的请求.
Nacos提供了权重配置来控制访问频率, 权重越大访问频率越高
Nacos同一集群的默认权重是1:1的
- Nacos控制台可以设置实例的权重值, 0~1之间
这时候我们把8082端口的权重改为0.1, 8082端口的权重仍为1
理论上将我们把服务请求11次, 大概率上有10次服务请求到了8081的端口上, 只有1次服务请求到了8082的端口上
注意, 如果我们把权重设置为0, 则完全不会被访问到
服务上线不停机更新
其实这个特性是非常强的, 作为一个服务器不要以为权重是0就觉得它是废物, 想想看,如果我们现在对一个服务进行升级, 先将8082的权重调成0, 然后对它进行配置, 完成后可以将权重稍微调大一点, 一遍放过来一小部分请求方便测试, 如果没毛病, 我们再将权重调大, 这个不停机更新的方法很优雅
如果这篇【文章】有帮助到你💖,希望可以给我点个赞👍,创作不易,如果有对Java后端或者对
spring
感兴趣的朋友,请多多关注💖💖💖
👨🔧 个人主页 : 阿千弟