Nacos简介和原理

发布时间:2024年01月11日

?1 Nacos简介

1.1 Nacos是什么

?????????Nacos提供了统一配置管理、服务发现与注册。其中服务注册和发现的功能,相当于dubbo里面使用到 的zookeeper、或者spring cloud里面应用到的consoul以及eureka

1.2 Nacos特性

服务发现和服务健康检测

????????Nacos提供了基于RPC的服务发现,服务提供者可以将自身的服务通过原生API或者openApi来实现服务 的注册,服务消费者可以使用API或者Http来查找和发现服务

同时,Nacos提供了对服务的实时监控检查,当发现服务不可用时,可以实现对服务的动态下线从而阻止服务消费者向不健康的服务发送请求。

临时实例采用心跳模式,非临时实例采用主动检测模式 临时实例心跳不正常会被剔除,非临时实例则不会被剔除 Nacos支持服务列表变更的消息推送模式,服务列表更新更及时 Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式。(注:非临时实例会增大对服务器的压力不建议使用)

配置管理

????????传统的配置管理,是基于项目中的配置文件来实现,当出现配置文件变更时需要重新部署,而动态配置 中心可以将配置进行统一的管理,使得配置变得更加灵活以及高效。

动态配置中心可以实现路由规则的动态配置、限流规则的动态配置、动态数据源、开关、动态UI等场景

1.3 Nacos数据模型?

命名空间(Namespace)?

可用于进行不同环境的配置隔离。

例如:

可以隔离开发环境——测试环境和生产环境,因为它们的配置可能各不相同;
可以隔离不同的用户——不同的开发人员使用同一个nacos管理各自的配置,可通过namespace隔离。 不同的命名空间下可以存在相同名称的配置分组(Group) 或配置集。

1 每个namespace都有唯一id 。

2 服务设置namespace时要写id而不是名称。

3 不同namespace下的服务互相不可见。

spring:
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848 # nacos地址
        namespace: df367f3d-05c1-412a-b995-4ff1398ebe0a # nacos命名空间


配置分组(Group)?

配置分组是对配置集进行分组。 通过一个有意义的字符串(如 Buy 或 Trade )来表示。 不同的配置分组下可以有相同的当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 配置分组的常见场景——可用于区分不同的项目或应用。

spring:
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848 # nacos地址
        group: xxx   # 定义组别

集群(cluster-name)

1 修改order-service中的application.yml,设置集群为HZ:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos 服务端地址
      discovery:
        cluster-name: HZ # 配置集群名称,也就是机房位置

2? 然后在order-service中设置负载均衡的IRule为NacosRule,这个规则优先会寻找与自己同集群的服务:

userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则 

注: NacosRule负载均衡策略 优先选择同集群服务实例列表 本地集群找不到提供者,才去其它集群寻找,并且会报警告 确定了可用实例列表后,再采用随机负载均衡挑选实例。

配置集(Data ID)

配置集(Data ID) 在系统中,一个配置文件通常就是一个配置集。 一个配置集可以包含了系统的各种配置信息

1.4 Nacos官网

官网地址

2 安装部署

2.1 Nacos支持三种部署模式

单机模式 - 用于测试和单机试用。

集群模式 - 用于生产环境,确保高可用。

多集群模式 - 用于多数据中心场景。

2.2 单机模式支持mysql


1.安装数据库,版本要求:5.6.5+?
2.初始化mysql数据库,数据库初始化文件:mysql-schema.sql?
3.修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。 spring.datasource.platform=mysql?
db.num=1?
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=nacos_devtest db.password=youdontknow ??
4.启动nacos sh startup.sh -m standalone?
5.访问nacos localhost:8848/nacos

?

3 nacos注册中心

3.1 注册流程图

?

3.2 服务实例的权重设置

在Nacos控制台可以设置实例的权重值,首先选中实例后面的编辑按钮 将权重设置为0.1,测试可以发现8081被访问到的频率大大降低

?

?

3.4 引入项目

3.4.1?pom引入依赖

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2.2.6.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
        <!-- SpringCloud Alibaba Nacos 注册中心-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency> 

3.4.2? 在yml文件添加nacos地址

spring:
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848 # nacos地址
        namespace: df367f3d-05c1-412a-b995-4ff1398ebe0a # nacos命名空间
        group: xxx   # 定义组别
        cluster-name: HZ # nacos集群

4 nacos配置中心

4.1?配置统一管理

4.1.1?pom引入依赖

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2.2.6.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
        <!-- SpringCloud Alibaba Nacos 注册中心-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency> 

        <!-- SpringCloud Alibaba Nacos Config 配置中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>   

4.1.2?创建bootsrap.yml文件

1 该文件属于引导文件,优先级高于application.yml。

2 在bootsrap.yml配置与nacos的相关配置。

3 示例i代码

spring:
  application:
    name: userservice # 服务名称
  profiles:
    active: dev #开发环境,这里是dev 
  cloud:
    nacos:
      server-addr: localhost:8848 # Nacos地址
      config:
        file-extension: yaml # 文件后缀名

4.2?配置热更新

4.2.1?方式一:在@Value注入的变量所在类上添加注解@RefreshScope

4.2.2?方式二:使用@ConfigurationProperties注解

@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
}

4.3?多环境配置共享

1?微服务启动时会从nacos读取多个配置文件:

[spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml [spring.application.name].yaml,例如:userservice.yaml 无论profile如何变化,[spring.application.name].yaml这个文件一定会加载,因此多环境共享配置可以写入这个文件

2?多种配置的优先级:

[服务名]-[环境].yaml >[服务名].yaml > 本地配置

4.4?多服务共享配置

注:?不同微服务之间可以共享配置文件,通过下面的两种方式来指定:

方式一:

spring:
  application:
    name: userservice # 服务名称
  profiles:
    active: dev # 环境,
  cloud:
    nacos:
      server-addr: localhost:8848 # Nacos地址
      config: 
        file-extension: yaml # 文件后缀名
        shared-configs: # 多微服务间共享的配置列表
          - dataId: common.yaml # 要共享的配置文件id

方式二:

spring:
  application:
    name: userservice # 服务名称
  profiles:
    active: dev # 环境,
  cloud:
    nacos:
      server-addr: localhost:8848 # Nacos地址
      config: 
        file-extension: yaml # 文件后缀名
        extends-configs: # 多微服务间共享的配置列表
          - dataId: extend.yaml # 要共享的配置文件id

优先级: 环境配置 >服务名.yaml > extension-config > extension-configs > shared-configs > 本地配置

5 nacos集群配置

搭建步骤

1 搭建MySQL集群并初始化数据库表

2 下载解压nacos

3 修改集群配置(节点信息)、数据库配置

4 分别启动多个nacos节点

5 nginx反向代理

文章来源:https://blog.csdn.net/qq_38289583/article/details/135413001
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。