Nacos使用及原理

80 阅读2分钟

Nacos是什么

是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台,可以理解为服务的注册中心,用来管理和监控各个服务的状态

下载地址

nacos.io/download/re…

image.png

这里要特别注意版本对应问题

我们项目中用到的Spring Cloud Alibaba版本是2022.0.0.0-RC2,根据对应关系,Nacos的版本选择了2.2.1。

Nacos启动

需要注意的是,nacos2.2.1版本,需要修改配置文件nacos-conf-application.properties中的secret.key,可以自定义,通过Base64编码,不能低于32位

image.png

image.png

我们按照官网用命令方式打开Nacos服务

image.png

打开浏览器访问地址 http://localhost:8848/nacos

image.png

看到这个登录页面说明服务已经启动,默认的账号密码都是nacos

image.png

登录成功!

项目注册

子项目pom文件增加依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

然后修改一下子项目base-server中的配置文件application.yml,如图:

server:
  port: 8080
spring:
  application:
    name: base-server
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

启动项目,启动成功后,刷新nacos网站的服务列表,即可看到base-server服务已经注册成功!

image.png

心跳机制

每一个在Nacos注册中心注册成功的服务,都会定时向服务中心发送信号(心跳包),通常是5秒钟发送一次,就是用来告诉服务中心“我这个服务是正常状态,可以被调用”。而服务中心,也会定时进行心跳任务检查,通过每5秒检查一下心跳信息来判断是否超时,就是用当前时间减去上一次心跳的时间,如果超过15秒则将节点设置为非健康状态并进行广播,如果超过30秒则将节点进行移除,说明节点不可用。

客户端(Nacos Client)也会定时从服务注册中心拉取服务列表信息(通常10秒一次),服务中心也会进行数据监测,一旦监测到服务提供者异常或者服务列表变化,基于UDP协议进行推送更新。

Distro协议

  1. Nacos每个节点自己负责部分的写请求
  2. 每个节点会把自己负责的新增数据同步给其他节点
  3. 每个节点定时发送自己负责数据的校验值到其他节点来保持数据一致性
  4. 每个节点独立处理读请求,及时从本地发出响应
  5. 新加入的Distro节点会进行全量数据拉取(具体操作是轮询所有的Distro节点,通过向其他的机器发送请求拉取全量数据)