SpringCloud源码探析(二)-Nacos注册中心

1.概述

Nacos是Spring Cloud Alibaba中的核心组件之一,它提供了服务发现、服务配置和服务管理等功能,可以作为注册中心和配置中心使用。注册中心是微服务架构体系中的核心组件之一,Nacos比Eureka有着更强大的功能,它们都能提供服务注册和服务拉取、支持服务提供者以心跳的方式来健康监测。Nacos支持服务列表变更的消息推送模式,服务更新更及时;Nacos服务端会主动监测客户端状态(临时实例采用心跳模式、非临时实例采取主动监测方式)。本文将详细说明nacos的使用以及部分注意事项。

2.使用与分析

2.1 Nacos使用

注册中心一般包含三个角色:服务提供者(Server)、服务消费者(Client)、注册中心(Registry),一个服务可以同时是提供者和消费者。Nacos包括服务端安装包和服务依赖包,具体使用如下:

2.1.1 服务端包安装

本文以centos7系统作为服务端安装环境,下载地址。我这里选择1.4.2版本,下载并上传到服务器,如下:
在这里插入图片描述
解压后的目录如下:
SpringCloud源码探析(二)-Nacos注册中心_第1张图片
conf文件夹下存放了nacos的配置文件,可根据需要自行修改。接下来就可启动nacos,nacos单机版启动指令如下:

startup.sh -m standalone

进入bin文件夹下,执行上述指令,得到结果如下(前提是jdk安装完成并能正常运行,默认jdk地址是/usr/local/java,可在配置文件中指定):
在这里插入图片描述
启动成功之后,可以通过ip+端口号访问web页面(ip+端口号+/nacos/index.html),如下所示:
SpringCloud源码探析(二)-Nacos注册中心_第2张图片

2.1.2 spingboot整合nacos

1.引入依赖

			<dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.3.7.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR3</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>

上述依赖中,前三个分别是spring-boot、spring-cloud、spring-cloud-alibaba的依赖,若要引入nacos的服务发现包,同时还需要引入spring-boot-starter-web包,要不然会报错。
2.启动文件添加@EnableDiscoveryClient注解

@Slf4j
@EnableDiscoveryClient
@SpringBootApplication
public class OrderApplication {
    public static void main(String[] args) {
        log.info("这是新的OrderApplication");
        SpringApplication.run(OrderApplication.class, args);
    }
}

3.添加配置文件

#服务端口号
server.port=8082
#服务名称
spring.application.name=order-service
#注册中心地址
spring.cloud.nacos.discovery.server-addr=http://localhost:8848

4.启动服务

SpringCloud源码探析(二)-Nacos注册中心_第3张图片
SpringCloud源码探析(二)-Nacos注册中心_第4张图片
通过nacos的图形化界面查看,若在服务列表中能够查看到服务,则表明注册成功。

2.2 核心配置分析

2.2.1 Nacos分级存储模型

Nacos服务发现的设计模型如下所示:
SpringCloud源码探析(二)-Nacos注册中心_第5张图片
传统服务发现(Consul、Eureka等)的模型一般是Service下面直接关联的是Instance,而nacos在这里增加了集群(Cluster)的概念。增加Cluster的目的也是为了提高访问效率、隔绝异常服务,例如以地域划分集群,上海机房内的服务都注册到SH集群,杭州机房内的服务都注册到HZ集群,上海机房内的服务优先调用上海集群内的其它服务,杭州机房内的服务优先调用杭州集群内的其它服务,只有当上海集群内所有被调用服务发生异常时,才有可能去杭州集群调用服务。
按照Nacos的设计模型,服务隔离主要有Cluster、Group、Namespace。解释如下:

Cluster (集群隔离):服务下挂载的机器分属不同的环境,希望能够在某些情况下将某个环境的流量全部切走,这样可以通过集群隔离,来做到一次性切流。

Group (分组隔离):参考Dubbo 的服务隔离策略,需要注意的一点是:Dubbo 注册三元组(接口名+分组+版本)时,其中 Dubbo 的分组是包含在 Nacos 的服务名中的,并不是映射成了 Nacos 的分组,一般 Nacos 注册的服务是默认注册到 DEFAULT_GROUP 分组的。

Namespace (命名空间隔离):在实际场景中使用也比较普遍,一般用于多个环境的隔离,例如 daily,dev,test,uat,prod 等环境的隔离。特别是当环境非常多时,使用命名空间做逻辑隔离是一个比较节约成本的策略。

1.配置cluster
通过下述配置可以指定服务集群,

spring.cloud.nacos.discovery.cluster-name=beijing

SpringCloud源码探析(二)-Nacos注册中心_第6张图片

2.配置group

spring.cloud.nacos.discovery.group=AAA

SpringCloud源码探析(二)-Nacos注册中心_第7张图片
3.配置namespace
在nacos的web端添加命名空间,如下所示:
SpringCloud源码探析(二)-Nacos注册中心_第8张图片
添加完成后在命名空间菜单栏下可以进行查看:
SpringCloud源码探析(二)-Nacos注册中心_第9张图片
在配置文件中配置namespace,如下:

spring.cloud.nacos.discovery.namespace=a6a062e0-085d-4eb0-936d-ad9f9bbc0d74

namespace是生成的唯一id或指定值,启动服务,注册成功后可以得到如下结果:
SpringCloud源码探析(二)-Nacos注册中心_第10张图片
namespace环境隔离,注意事项如下:

1.每个namespace都有唯一id;
2.不同namespace下的服务不可见。

2.2.2 Nacos与Eureka的区别

1.Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式;
2.临时实例心跳不正常会被剔除,非临时实例则不会被剔除;
3.Nacos支持服务列表变更的消息推送模式,服务列表更新更及时;
4.Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式。

3.小结

1.nacos可以用作注册中心和配置中心;
2.nacos作为注册中心,可以提高比consul和eureka更加全面的注册发现功能、隔离功能;
3.cluster·、group、namespace的服务隔离模型,以及对推拉模型的支持,nacos可以快速被微服务框架集成。

4.参考文献

1.https://zhuanlan.zhihu.com/p/364527885
2.https://www.bilibili.com/video/BV1LQ4y127n4

5.附录

https://gitee.com/Marinc/nacos.git

你可能感兴趣的:(springCloud,spring,cloud,微服务)