注册中心组件-Nacos
一、Nacos概述
1.1 什么是Nacos
Nacos
是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos
是以服务为主要服务对象的中间件,Nacos
支持所有主流的服务发现、配置和管理。
Nacos
主要提供以下四大功能:
服务发现和服务健康监测。
动态配置服务。
动态
DNS
服务。服务及其元数据管理。
1.2 同类组件中,为什么要选择Nacos
常见的注册中心:
Eureka
(原生,2.0遇到性能瓶颈,停止维护)Zookeeper
(支持,专业的独立产品。例如:dubbo
)Consul
(原生,GO
语言开发)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 Server
和spring-cloud-starter-alibaba-nacos-config
实现 配置的动态变更。通过 Nacos Server
和spring-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
红框标注为当前使用版本组合。
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.class, args);
}
}
3.5 服务成功注册
消费者注册到
Nacos
跟生产者一样,也分为3步:
添加依赖:同生产者。 在 application.properties
中配置Nacos
的服务名及服务地址:同生产者。在引导类( 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
,也是未来微服务发展的趋势。