vlambda博客
学习文章列表

注册中心组件-Nacos

一、Nacos概述

1.1 什么是Nacos

Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现、配置和管理。

Nacos主要提供以下四大功能:

  1. 服务发现和服务健康监测。

  2. 动态配置服务。

  3. 动态DNS服务。

  4. 服务及其元数据管理。

1.2 同类组件中,为什么要选择Nacos

常见的注册中心:

  1. Eureka(原生,2.0遇到性能瓶颈,停止维护)
  2. Zookeeper(支持,专业的独立产品。例如: dubbo
  3. Consul(原生, GO语言开发)
  4. Nacos

相对于 Spring Cloud Eureka 来说,Nacos 更强大。

Nacos = Spring Cloud Eureka + Spring Cloud Config

Nacos 可以与 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring Cloud Eureka, Spring Cloud Config

  • 通过 Nacos Serverspring-cloud-starter-alibaba-nacos-config 实现 配置的动态变更。
  • 通过 Nacos Serverspring-cloud-starter-alibaba-nacos-discovery 实现 服务的注册与发现。

简而言之:

  • 替代 Eureka做服务注册中心。
  • 替代 Config做服务配置中心。

二、Nacos安装与访问

2.1 安装

可以从 官网最新稳定版本 下载 nacos-server-$version.zip 包。

# 解压
unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz

#
 进入bin目录
cd nacos/bin

#
 执行启动命令 (standalone代表着单机模式运行,非集群模式)
[Linux/Unix/Mac]# sh startup.sh -m standalone
[Windows]# cmd startup.cmd

2.2 访问

访问:http://localhost:8848/nacos

用户名密码:nacos/nacos
  • 登录界面

三、Nacos作为注册中心

3.1 依赖版本推荐

Spring Cloud Alibaba   &   Spring Cloud   &   Spring Boot

红框标注为当前使用版本组合。

注册中心组件-Nacos

3.2 依赖引入


<properties>
  <spring.boot.version>2.2.5.RELEASE</spring.boot.version>
  <spring.cloud.version>Hoxton.SR3</spring.cloud.version>
  <cloud.alibaba.version>2.2.1.RELEASE</cloud.alibaba.version>
</properties>

<dependencyManagement>
  
  <dependencies>
    
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-dependencies</artifactId>
      <version>${spring.boot.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    <dependency>
      
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-dependencies</artifactId>
      <version>${spring.cloud.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-alibaba-dependencies</artifactId>
      <version>${cloud.alibaba.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    
  </dependencies>
  
</dependencyManagement>

3.3 配置 application.properties

# 端口及服务名
server.port=8070
spring.application.name=nacos-provider

# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

# 自定义参数
myName=nacos

3.4 开启服务发现

/* *
 * 通过Spring Cloud原生注解 @EnableDiscoveryClient 开启服务注册发现功能。
 */


@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosProviderApplication.classargs);
    }

}

3.5 服务成功注册

注册中心组件-Nacos

消费者注册到Nacos跟生产者一样,也分为3步:

  1. 添加依赖:同生产者。
  2. application.properties中配置 Nacos的服务名及服务地址:同生产者。
  3. 在引导类( NacosConsumerApplication.java)中添加 @EnableDiscoveryClient注解:同生产者。

四、Nacos服务注册原理

五、Nacos对比其他注册中心

5.1 与常见注册中心的功能对比

5.2 CAP理论

分布式系统的最大难点,就是各个节点的状态如何保持一致。CAP理论是在设计分布式系统的过程中,处理数据一致性问题时必须考虑的理论。

C:Consistency一致性,访问所有的节点得到的数据应该是一样的。注意,这里的一致性指的是强一致性,也就是数据更新完,访问任何节点看到的数据完全一致,要和弱一致性,最终一致性区分开来。

A:Availability可用性,所有的节点都保持高可用性。注意,这里的高可用还包括不能出现延迟,比如如果节点B由于等待数据同步而阻塞请求,那么节点B就不满足高可用性。

P:Partiton tolerance分区容忍性,这里的分区是指网络意义上的分区。由于网络是不可靠的,所有节点之间很可能出现无法通讯的情况,在节点不能通信时,要保证系统可以继续正常服务。

CAP 原则指的是:这三个要素最多只能同时实现两点,不可能三者兼顾。

5.3 Nacos支持AP和CP的切换

C是所有节点在同一时间看到的数据是一致的;而A的定义是所有的请求都会收到响应。

何时选择何种模式?

  • 一般来说,如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能保持心跳上报,那么可以选择AP模式,AP模式为了服务的可能性而减弱了一致性,因此AP模式下只支持临时实例。

  • 如果需要在服务级别编辑或者存储配置信息,那么CP是必须的。K8S服务和DNS服务则适用于CP模式。CP模式下则支持注册持久化实例,此时则是以Raft协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则返回错误。

# 切换命令:
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'

5.4 总结Nacos功能优势

Nacos 作为服务发现中心,具备更多的功能支持项,且从长远来看 Nacos在以后的版本会支持 SpringCloud + Kubernetes 的组合,填补了两者的鸿沟,在两套体系下可以采用同一套服务发现和配置管理的解决方案,这将大大简化使用和维护的成本。

另外,Nacos 计划实现 Service Mesh,也是未来微服务发展的趋势。