0%

Nacos

windows命令

startup.cmd -m standalone

服务注册到Nacos

  • 在cloud-demo父工程中添加spring-cloud-alibaba的管理依赖
1
2
3
4
5
6
7
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
  • 添加nacos的客户端依赖
1
2
3
4
5
<!-- nacos客户端依赖包 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  • 修改客户端配置
1
2
3
4
spring:
cloud:
nacos:
server-addr: localhost:8848 #nacos服务地址

Nacos服务分级存储模型

  • 一个服务分为多个集群
  • 一个集群有多个实例
  • 服务跨集群调用问题
    • 服务调用尽可能选择本地集群的服务,跨集群调用较迟较高
    • 本地集群不可访问时,再去访问其它集群

修改指定实例集群

逐个修改,逐个启动

1
2
3
4
5
spring:
cloud:
nacos:
discovery:
cluster-name: HZ #集群名称

NacosRule负载均衡

  • 默认使用轮询规则
  • 在服务端中设置负载均衡的IRule为NacosRule,这个规则优先会寻找与自己同集群的服务
1
2
3
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则
  • 注意将客户端权重都设置为1
  • NacosRule优先选择本地集群,在本地多个集群进行随机负载均衡
  • 跨集群访问服务端会发出警告
权重负载均衡
  • 服务器设备性能有差异,部分实例所在机器性能差别,我们希望好的机器承担更多用户请求
  • Nacos提供了权重配置来控制访问频率,权重越大访问频率越高
  • 在控制台编辑页面修改,范围0-1,0不会访问

环境隔离

  • Nacos中服务存储和数据存储的最外层都是namespace,用来做最外层空间隔离
  • 从外到内:Namespace → Group → Service/Data
  • 在控制台新建命名空间
  • 在配置文件添加namespace
1
2
3
4
5
spring:
cloud:
nacos:
discovery:
namespace: 7550979b-3a00-4833-b82f-19f2d9e22b2e #命名空间ID
  • 不同命名空间的服务互相不可见

Nacos注册中心细节

  • 消费者定时拉取服务,存储在服务列表缓存,直接使用
  • 健康检测与Eureka区别
    • 实例分为临时实例与非临时实例
    • 默认是临时实例,采用心跳检测,实例给注册中心提供信息
    • 非临时实例不会做心跳检测,由nacos主动询问
    • nacos不会剔除非临时实例,会等待恢复
    • 有服务变更,会主动推送消息给消费者,更新缓存

临时实例和非临时实例

修改配置文件

1
2
3
4
5
spring:
cloud:
nacos:
discovery:
ephemeral: false #是否是临时实例
------ THEEND ------

欢迎关注我的其它发布渠道