
Nacos注册中心
一、服务注册与发现
1.启动Nacos
首先,启动Nacos并访问Web端控制台
2.引入依赖
①父工程依赖
<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客户端依赖包 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
 
3.添加配置
spring:
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos服务地址
 
- 到这里,就完成了nacos的基本配置,可以让微服务借助Nacos进行服务注册与服务发现。
 
二、Nacos服务分级存储模型
1.概念
- 一级是
服务 - 二级是
集群 - 三级是
实例 
- 服务跨集群调用问题:
 -  
  
- 服务调用尽可能选择本地集群的服务,跨集群调用延迟较高,当本地集群不可访问时,再去访问其他集群。
 
 
2.配置集群属性
spring:
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos服务地址
      discovery:
        cluster-name: HZ #集群名称,可自定义
 
- 配置完成后,可重启微服务,在nacos的Web端控制台页面上查看集群变化。
 
三、NacosRule负载均衡
1.实现NacosRule
userservice: # 要做配置的微服务名称,即配置会作用到的微服务。
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule  # 使用Nacos负载均衡规则
 
- NacosRule负载均衡策略:
 -  
  
- ①优先选择本地集群(同一集群)服务实例列表。
 - ②本地集群找不到服务提供者,才去其他集群寻找,并且会报警告。
 - ③确定了可用实例列表后,再采用随机负载均衡挑选实例。
 
 
2.根据权重负载均衡
实际部署时会吃出现这样的场景:
- 服务设备性能有差异,部分实例所在的机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。
 Nacos中,就提供了权重配置来控制访问频率的功能,权重越大则访问频率越高。
Nacos控制台:
- 在Nacos控制台可以设置实例的权重值,首先选中实例后面的编辑按钮
 
- 自定义权重后,保存设置即可
 
- 实例的权重控制:
 -  
  
-  
    
- Nacos控制台可以控制实例的权重值,0~1之间。
 - 同集群内的多个实例,权重越高被访问的频率越高。
 - 权重设置为0则完全不会被访问。
 
 
 -  
    
 
四、环境隔离 - namespace
Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层的隔离。
Nacos控制台
- 新建命名空间
 
- 自定义命名空间信息
 
- 创建成功
 
spring:
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos服务地址
      discovery:
        cluster-name: GD #集群名称
        namespace: ec10a576-86b6-45eb-ba7c-c0647b6ef69a #命名空间ID,这里是dev环境
 
- Nacos环境隔离
 -  
  
-  
    
- namespace用来做环境隔离;
 - 每个namespace都有唯一id;
 - 不同namespace下的服务不可见(无法跨namespace远程调用);
 
 
 -  
    
 
五、Nacos注册中心原理
1.流程原理分析
- 服务提供者启动时注册信息。
 - 服务提供者为临时实例:采用心跳监控,向每30秒发送心跳请求向nacos汇报状态。
 - 服务提供者非临时实例:nacos会主动询问其状态。
 - 服务消费者远程调用服务提供者时,会定时从nacos拉取服务列表,更新服务列表缓存。
 - 当nacos注册中心的服务列表更新时,nacos还会主动推送消息给服务消费者,以更新服务列表缓存。
 
2.临时实例和非临时实例
- 服务注册到Nacos时,可以选择注册为临时实例或非临时实例,通过application.yml中添加配置消息来设置:
 
spring:
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos服务地址
      discovery:
        ephemeral: false # 是否是临时实例
 
3.总结
- Nacos与Eureka的共同点:
 -  
  
-  
    
- 都支持服务注册和服务拉取。
 - 都支持服务提供者心跳方式做健康检测。
 
 
 -  
    
 - Nacos和Eureka区别:
 -  
  
-  
    
- Nacos支持服务端主动检测提供者状态:临时实例采取心跳模式,非临时实例采取主动检测模式。
 - 临时实例心跳不正常会被剔除,非临时实例则不会被剔除。
 - Nacos支持服务列表变更的消息推送模式,服务列表更新更及时。
 - Nacos集群默认采用AP方式(强调数据可用性),当集群中存在非临时实例时,采用CP模式(强调数据可靠性、一致性);Eureka集群采用AP方式。
 
 
 -  
    
 











