Springcloud:Nacos注册中心

280 阅读5分钟

Nacos 注册中心

如何启动Nacos

  • win10控制台进入Nacos安装地址的的bin,输入startup.cmd -m standalone

为什么要学Nacos

  • Nacos是阿里巴巴的产品,在国内受欢迎程度比较高。而 Eureka也不是因为版本太老或者有重大缺陷所以不继续使用,而是相较于Nacos而言,使用人数还是有些差别。

Springcloud如何添加Nacos依赖

  • 客户端注入依赖

    <!-- nacos客户端依赖包 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    
  • 客户端配置

    spring:
      cloud:
        nacos:
          # Nacos 服务地址
          server-addr: localhost:8848
    

    Nacos服务地址根据实际情况来调整

    image-20220518142235751

  • 结果

    当完成上述的步骤之后,就把对应的服务绑定在对应端口的Nacos注册器中。我们启动已绑定的服务,可以通过访问Nacos地址http://192.168.153.129:8848/nacos/index.html来查看绑定服务名称和端口是否呈现

    image-20220518142756253

Nacos服务分级存储模型是什么

  • Nacos服务分级存储模型分为三层,第一层是服务,第二层是集群,第三层是实例。一个服务可以包含多个集群,一个集群可以包含多个实例。

    image-20220518192810903

Nacos为什么添加集群的概念

  • 尽可能避免跨集群调用
  • 服务调用尽可能选择本地集群的服务,跨集群调用延迟较高本地集群不可访问时,再去访问其它集群

什么是跨集群调用

  • 杭州的消费者跨集群去调用上海的提供者便是跨集群调用。大白话就是陀地不要偏要北姑。

    image-20220518193127385

如何给服务配置集群

  • 给服务配置集群,根据服务实体启动时配置文件内的集群名称来将服务划分到对应的集群。

    spring:
      cloud:
        nacos:
          server-addr: localhost:8848
          discovery:
          	 # 配置集群名称,将服务配置到对应集群
            cluster-name: HZ
    
  • 完成配置后重启服务实体。

  • 重启后可以通过Nacos管理页面看到同一个服务的不同实体分配至不同的集群

    image-20220518205259538

**注意:**实体的分配的集群是服务实体启动的时候分配的。如果在一台设备上操作,打算将一个服务的不同实体分配至不同的集群,需要在每次启动服务实体的时候修改集群名称

NacosRule负载均衡策略是什么

  • 优先调用同集群服务实例列表。

  • 本地集群找不到提供者,才会去其他集群寻找,并且会报敬告

    image-20220518210222460

  • 确定了可用实例列表后,再采用随机负载均衡挑选实例

Nacos如何设置权重

  • 在同一集群下的不同实体对应的服务器可能有所不同,服务器设备性能有差异,部分机器性能较好,另一些较差,性能好的承担更多的用户请求。

    我们通过Nacos管理页面中对同一集群的不同实体的权重进行调整。权重从1~01为必定可以被调用,0.5为50%几率被调用,0为绝对不被调用。

    image-20220518222819108

    image-20220518222909719

Nacos有什么实践场景

  • 可以让服务平滑升级。

    当服务实体a要升级的时候,逐步下降他的权重至0,让服务分流到其他实体。升级完毕之后,逐步上升实体a的权重,可以进行少量的服务进行测试。最后将其的权重调整到适合的比例。

    这么做可以让用户不会感觉到服务的变化,对用户体验没有太大的影响。也能平滑的升级服务。

什么是命名空间(Namespace

  • 命名空间也称为Namespace,它用于在多环境下配置管理和服务隔离。在不同的命名空间下,可以存在相同过的 GroupData ID的配置。Namespace常用的场景之一就是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。使用一套 Nacos注册中心去管理多套不同的环境服务器,呈现出了Nacos一个平台的概念。

如何创建命名空间(Namespace

  • 我们可以在Nacos管理页面中创建命名空间

    image-20220518230835151

如何将实例放入对应的命名空间中

  • 将对应命名空间的命名空间 ID配置到对应服务的配置中

    image-20220518231100499

    spring:
      cloud:
        nacos:
          discovery:
            # 命名空间 ID
            namespace: 0904c371-193a-4cd9-badc-3781e91a0bbe
    

    修改配置之后重启服务。

  • 我们可以通过Nacos管理页面查看到对应的服务已转移

    image-20220518231516034

如果不配置命名空间会怎样

  • 如果不配置命名空间的话,所有的服务默认放在 public命名空间当中

不同命名空间的服务能相互调用吗?

  • 不能! 不能! 不能!命名空间就是为了多环境下的服务和资源隔离的!

NacosEureka之间有什么区别

  • Nacos相较于Eureka而言,有着更多的功能,有着更好的生态。但是两者之间的使用并没有太大的差距。可以实现无缝切换。若是日后工作中使用的是Eureka注册器,可以尝试推荐使用Nacos来代替。
  • 两者对于微服务提供注册这个功能而言没有太大的区别,但是两者使用的依赖和配置是有所差异的。
  • 两者服务分级存储模型有所不同,Eureka是两级,分别是:服务和实例。Nacos是三级,分别是:服务,集群和实例。