首页 > 其他分享 >Nacos

Nacos

时间:2023-07-06 21:33:52浏览次数:27  
标签:服务 配置 namespace Nacos nacos config

1.什么是配置中心

在微服务架构中,当系统从一个单体应用,被拆分成分布式系统上一个个服务节后,配置文件也必须跟着迁移(分割) ,这样配置就分散了,不仅如此,分散中还包含着冗余,如下图:
配置中心将配置从各应用中剥离出来,对配置进行统一管理,应用自身不需要自身去管理配置

配置中心的服务流程如下

2.Nacos

2.1 对比

目前市面上用的比较多的配置中心有: Spring Cloud Config、Apollo、 Nacos和Disconf等。
由于Disconf不再维护,下面主要对比一下Spring Cloud Config、Apollo和Nacos.


从配置中心角度来看,性能方面Nacos的读写性能最高, Apollo次之, Spring Cloud Config依赖Git场景不适
开放的大规模自动化运维API。功能方面Apollo最为完善, nacos具有Apollo大部分配置管理功能,而Spring
Cloud Config不带运维管理界面,需要自行开发。Nacos的一大优势是整合了注册中心、配置中心功能,部署和操
作相比Apollo都要直观简单,因此它简化了架构复杂度,并减轻运维及部署工作。

2.2 概念

Nacos是阿里的一个开源产品,它是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。
官方介绍是这样的:
Nacos致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单 易用的特性集,帮助您实现动态服务
发现、服务配置管理、服务及流量管理。
Nacos帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构
的服务基础设施。

2.3 特性

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

  • 服务发现与服务健康检查
    Nacos使服务更容易注册,并通过DNS或HTTP接口发现其他服务, Nacos还提供服务的实时健康检查,以防
    止向不健康的主机或服务实例发送请求。
  • 动态配置管理
    动态配置服务允许您在所有环境中以集中和动态的方式管理所有服务的配置。Nacos消除 了在更新配置时重新
    部署应用程序,这使配置的更改更加高效和灵活。
  • 动态DNS服务
    Nacos提供基于DNS协议的服务发现能力,旨在支持异构语言的服务发现,支持将注册在Nacos.上的服务以域
    名的方式暴露端点,让三方应用方便的查阅及发现。
  • 服务和元数据管理
    Nacos能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周
    期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略。

3. 安装

3.1 官网下载压缩包,解压

3.2 修改配置文件

  • startup.cmd
set MODE="standalone"
  • 修改环境和系统变量,都要有JAVA_HOME

3.3 运行

http://localhost:8848/nacos
账号密码nacos

4.Nacos配置管理模型

对于Nacos配置管理,通过Namespace、group、DataID能够定位到一个配置集。

  • 配置集(Data ID)
    在系统中,一个配置文件通常就是一个配置集,一个配置集可以包含了系统的各种配置信息,例如,一个配
    置集可能包含了数据源、线程池、日志级别等配置项。每个配置集都可以定义一个有意义的名称,就是配置集的
    ID即Data ID。
  • 配置项
    配置集中包含的一个个配置内容就是配置项。它代表一个具体的可配置的参数 与其值域,通常以key=value
    的形式存在。例如我们常配置系统的日志输出级别( logLevel=INFO |WARN|ERROR)就是一个 配置项。
  • 配置分组(Group)
    配置分组是对配置集进行分组,通过一个有意义的字符串(如Buy或Trade )来表示,不同的配置分组下可
    以有相同的配置集( DatalD)。当您在Nacos.上创建一个配置时 ,如果未填写配置分组的名称,则配置分组的名
    称默认采用DEFAULT_ GROUP。配置分组的常见场景:可用于区分不同的项目或应用,例如:学生管理系统的配
    置集可以定义一个group为: STUDENT _GROUP。
  • 命名空间(Namespace)
    命名空间( namespace )可用于进行不同环境的配置隔离。例如可以隔离开发环境、测试环境和生产环境,
    因为它们的配置可能各不相同,或者是隔离不同的用户,不同的开发人员使用同一个nacos管理各自的配置,可通
    过namespace隔离。不同的命名空间下,可以存在相同名称的配置分组(Group)或配置集。
  • 最佳实践
    Nacos抽象定义了Namespace、Group、 Data ID的概念,具体这几个概念代表什么,取决于我们把它们看成
    什么,这里推荐给大家-种用法,如下图:
    Namespace :代表不同环境,如开发、测试、生产环境。
    Group :代表某项目,如XX医疗项目、XX电商项目
    Datald :每个项目下往往有若干个工程,每个配置集(Datald)是一个工程的主配置文件
  • namespace隔离设计
    namespace的设计是nacos基于此做多环境|以及多租户(多个用户共同使用nacos )数据(配置和服务)隔离的。
    从一个租户(用户)的角度来看,如果有多套不同的环境, 那么这个时候可以根据指定的环境来创建不同的
    namespce ,以此来实现多环境的隔离。例如,你可能有开发,测试和生产三个不同的环境,那么使用一套
    nacos集群可以分别建以下三个不同的namespace。如下图所示:

5.配置测试

  • pom.xml
<dependency>
  <groupId>com.alibaba.nacos</groupId>
  <artifactId>nacos-client</artifactId>
  <version>1.1.3</version>
</dependency>
public static void main(String[] args) throws Exception {
        String serverAddr = "127.0.0.1";
        String dataId = "nacos_demo.yaml";
        String group = "DEFAULT_GROUP";
        //不指定为 public空间
        String namespace = "";
        Properties properties = new Properties();
        properties.put("serverAddr", serverAddr);
        properties.put("namespace", namespace);
        ConfigService configService = NacosFactory.createConfigService(properties);
        String content = configService.getConfig(dataId, group, 5000);
        System.out.println(content);
    }

6.集成SpringCloud

  • pom.xml
<dependencies>
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  </dependencies>
  • bootstrap.yml
server:
  port: 56010

spring:
  application:
    name: service1
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        #dataId 名称是application的name加file-extension
        file-extension: yaml
        group: TEST_GROUP
        #Data id 自定义拓展
        ext-config[0]:
          data-id: ext-config-common01.properties
          group: Gropp
          refresh: true #支持配置动态刷新
        ext-config[1]:
          data-id: ext-config-common02.properties
          group: Gropp
          #自定义共享Data id 配置
        shared-dataids: ext-config-common02.properties,ext-config-common01.properties
          #是否动态刷新
        refreshable-dataids: ext-config-common01.properties
#        namespace:

7.配置的优先级

Spring Cloud Alibaba Nacos Config目前提供了三种配置能力从Nacos拉取相关的配置。

  • A:通过| spring. cloud . nacos . config. shared-dataids |支持多个共享Dlata Id的配置
  • B:通过| spring . cloud. nacos . config . ext -config[n]. data- id的方式支持多个扩展Data Id的配置,多个
    Data ld同时配置时,他的优先级关系是spring. cloud.nacos . config. ext-config[n]. data-id其中n的值越大,优先级越高。
  • C:通过内部相关规则(应用名、扩展名)自动生成相关的Data ld配置
    当三种方式共同使用时,他们的一个优先级关系是:C> B >A

标签:服务,配置,namespace,Nacos,nacos,config
From: https://www.cnblogs.com/lwx11111/p/17533394.html

相关文章

  • 十四、Sentinel配置持久化到Nacos
    Sentinel持久化配置我们首先需要知道:在SentinelDashboard中配置规则之后重启应用就会丢失,所以实际生产环境中需要配置规则的持久化实现,Sentinel提供多种不同的数据源来持久化规则配置,包括file,redis、nacos、zk。Sentinel规则持久化到Nacos将限流规则持久化进Nacos保存,只要刷新......
  • 关于spring-cloud-starter-alibaba-nacos-discovery找不到,没有版本(pom爆红,找不到)
    #一,我这边发现每次项目都有经常发生这样的问题问题:这种问题说实话很弱智,但还是有类似于这种事情发生啊原因:1.在POM依赖没有版本的时候,可能原因是父工程或者父依赖中没有指定版本,所以在子工程中找不到版本(本次错误)2.还有就是父工程有版本,或者子工程也有版本的时候,此时就是本地......
  • maven 网关应用:[NACOS ConnectException httpPost] currentServerAddr: http://localh
    网关应用运行忽然报错:[NACOSConnectExceptionhttpPost]currentServerAddr:http://localhost:8848,虽然调整了代码逻辑,但是nacos的配置没有变更过,之前也还能正常跑,网上查了一些,有说是配置优先级的问题,说是Nacos默认的配置优先级最高,覆盖了本地了,但是我遇到的情况是虽然一直......
  • 【Spring Cloud Alibaba】Nacos 注册中心
    目录1.NacosServer的安装和启动1.解压以及目录说明2.修改配置文件3.Mysql表的导入4.NacosServer启动5.登录Nacos2.Nacos服务注册1.搭建两个nacos的客户端2.选择依赖3.修改配置文件4.修改启动类5.启动测试3.Nacos服务发现3.1DiscoveryClient3.2集成openfei......
  • 【Spring Cloud Alibaba】Nacos 配置中心
    目录1.Nacos配置中心快速入门1.1导入依赖1.2在Nacos中新建一个powernode的命名空间1.3NacosServer里面添加一个配置文件1.4项目中添加一个配置文件bootstrap.yml2.Nacos获取多配置文件3.NacosConfig常用的配置3.1Config常用配置3.2bootstrap.yml模板1.Naco......
  • nacos-sdk-go/v2版本 提示客户端连接不上
    nacos-sdk-gov2报错提示客户端连接不上标签(空格分隔):nacos前言nacos版本:v2nacos-sdk-go版本:v2背景:使用nacos-sdk-go来获取配置,发现一直在找缓存目录的文件,但使用openapi可以获取到配置报错信息clientnotconnected,currentstatus:STARTING提示客户端连接失败???1999-0......
  • SpringBoot SpringCloud Nacos等一些组件版本对应
    毕业版本依赖关系(推荐使用)由于SpringBoot2.4+和以下版本之间变化较大,目前企业级客户老项目相关SpringBoot版本仍停留在SpringBoot2.4以下,为了同时满足存量用户和新用户不同需求,社区以SpringBoot2.4为分界线,同时维护2.2.x和2021.x两个分支迭代。2021.x分支......
  • nacos部署
    1.jdk配置#安装jdkyuminstalljava-y#配置环境变量whichjava#找到jdk位置/usr/bin/javall/usr/bin/javavim/etc/pfrofileexportJAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.el7_9.x86_64/jre"exportJRE_HOME=$JAVA_HOME/jreexportCLASSP......
  • Nacos
    Nacos是SpringCloudAlibaba的组件,而SpringCloudAlibaba也遵循SpringCloud中定义的服务注册、服务发现规范。因此使用Nacos和使用Eureka对于微服务来说,并没有太大区别。主要差异在于:依赖不同服务地址不同配置方式在父工程引入依赖<artifactId>spring-cloud-alibabadepe......
  • Nacos如何避免并发读写冲突问题
    刚开始:privatefinalMap<String,Map<String,Service>>serviceMap=newConcurrentHashMap<>();这个serviceMap装的时一个旧的实例列表,在对集群注册更新的时候,后台异步执行时会将旧的实例拷贝一份整出一个全新的集合,拷贝后异步执行的线程池里面要往里面新加就新加,想从里面......