Nacos 的高级应用(一)

源码:学习demo: 关于学习的所有代码

目录:

1、Nacos的服务分级存储模型

2、Nacos的权重配置

3、Nacos的环境隔离

一、Nacos的服务分级存储模型

1、概念

一个服务可以有多个实例,例如我们的user-service,可以有:

  • 127.0.0.1:8081

  • 127.0.0.1:8082

  • 127.0.0.1:8083

假如这些实例分布于全国各地的不同机房,例如:

  • 127.0.0.1:8081,在上海机房

  • 127.0.0.1:8082,在上海机房

  • 127.0.0.1:8083,在杭州机房

Nacos就将同一机房内的实例 划分为一个集群

也就是说,user-service是服务,一个服务可以包含多个集群,如杭州、上海,每个集群下可以有多个实例,形成分级模型,如图:

微服务互相访问时,应该尽可能访问同集群实例,因为本地访问速度更快。当本集群内不可用时,才访问其它集群。例如:

杭州机房内的order-service应该优先访问同机房的user-service。

2、给user-service配置集群

 1、配置文件:application.properties

#配置当前服务的集群名称,名称自定义的  HZ代指杭州
spring.cloud.nacos.discovery.cluster-name=HZ 

2、启动三个用户实列,看看效果

 可以看见这里有两个集群,总共三个实列,点击详情可以看见:

 存在两个集群,分别是HZ和SH。

小知识,IDEA上面一个服务启动多个实列和配置实列的参数:

 选中实列,点击复制,就可以出现新的实列了,也可以在红框哪里给新的实列配置各种参数。

3、服务之间集群调用的使用

1、给订单服务添加集群配置和负载均衡配置:application.properties

#配置当前服务的集群名称,名称自定义的  HZ代指杭州
spring.cloud.nacos.discovery.cluster-name=HZ
#负载均衡策略为:优先访问本集群的服务,如果本集群有多个实列,那么对本集群实列的访问就是随机
#如果本集群没有实列,那么访问其他集群的实列时,采用的是随机策略。
userservice.ribbon.NFLoadBalancerRuleClassName=com.alibaba.cloud.nacos.ribbon.NacosRule

注意:需要把用户服务的权重设置为1。

 注意:如果访问的不是本地集群,那么会出现下列的警告:跨集群访问警告

2022-04-20 21:53:26.832  WARN 17844 --- [nio-8080-exec-8] c.alibaba.cloud.nacos.ribbon.NacosRule   : A cross-cluster call occurs,name = userservice, clusterName = HZ, instance = [Instance{instanceId='192.168.0.103#8083#SH#DEFAULT_GROUP@@userservice', ip='192.168.0.103', port=8083, weight=1.0, healthy=true, enabled=true, ephemeral=true, clusterName='SH', serviceName='DEFAULT_GROUP@@userservice', metadata={preserved.register.source=SPRING_CLOUD}}, Instance{instanceId='192.168.0.103#8082#SH#DEFAULT_GROUP@@userservice', ip='192.168.0.103', port=8082, weight=1.0, healthy=true, enabled=true, ephemeral=true, clusterName='SH', serviceName='DEFAULT_GROUP@@userservice', metadata={preserved.register.source=SPRING_CLOUD}}]

总结:com.alibaba.cloud.nacos.ribbon.NacosRule 负载均衡策略

  1. 优先选择同集群服务实例列表
  2. 本地集群找不到提供者,才去其它集群寻找,并且会报警告
  3. 确定了可用实例列表后,再采用随机负载均衡挑选实例

二、Nacos的权重配置

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

服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承但更

多的用户请求。

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

 总结:实例的权重控制

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

三、Nacos的环境隔离

Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层隔离。

 一般开发中,都会存在三个环境,dev-开发环境,uat-测试环境,master-生产环境,这里的环境隔离就是可以根据这个来划分,用来防止 开发环境的服务 访问到了 测试环境的服务。

1、Nacos控制台可以创建namespace,用来隔离不同环境

 2、然后填写一个新的命名空间信息:

 3、保存后会在控制台看到这个命名空间的id:

 4、修改订单服务的配置文件:application.properties

# 命名空间,填ID  dev环境
spring.cloud.nacos.discovery.namespace=492a7d5d-237b-46a1-a99a-fa8e98e4b0f9

5、效果

6、此时通过订单服务访问用户服务会报错,因为它们不在同一个环境中。

总结:Nacos环境隔离

  1. 每个 namespace 都有唯一id
  2. 服务设置 namespace 时要写id而不是名称
  3. 不同 namespace下的服务互相不可见,即相互之间不能访问

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值