Nacos

Naocs介绍

官网文档地址: https://nacos.io/zh-cn/docs/quick-start.html

Naocs缩写就是 Naming Configuration service,本身nacos就是一个service服务,这个服务的功能包括命名管理、服务注册发现、配置管理

Nacos 致力于帮助您发现配置管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现服务配置服务元数据流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。 和spring cloud原生组件eureka是非常类似的,所以在eureka停更之后,nacos的活跃度非常高,无论从应用还是性能都是首选替代品。

Nacos功能 

  • 服务治理
    • 注册功能
    • 发现功能
  • 配置管理 

环境准备运行

配置JDK环境变量

进入到nacos家目录中bin文件夹下,打开cmd

 需要一个集群环境,一个进程跑不起来

运行命令,添加一个选项,单机运行

bin> startup.cmd -m standalone

运行之后,访问地址:localhost:8848/nacos。通过登录用户名密码:nacos  nacos。服务端。

idea配置nacos启动项

1、启动项配置界面

 2、添加新的配置项shell script

3、填充启动配置

4、启动脚本启动项

Nacos服务注册发现配置

nacos作为服务治理的组件,可以提供服务的协调管理功能包括服务注册服务发现

Nacos服务注册

模拟服务注册

CURL简介

该命令可以在系统中发送一个自定义的http请求,命令格式

curl -X [请求方式] [请求路径]

访问百度

curl -X GET https://www.baidu.com

 访问nacos注册

curl -X POST "http://localhost:8848/nacos/v1/ns/instance?serviceName=first-service&ip=127.0.0.1&port=8080"

Nacos运行架构

nacos-server是一个服务进程,运行在web容器中,可以接收外界发起的请求,比如我们模拟post请求在nacos进行数据的注册。

配置注册 

服务端客户端

整合nacos-client 

1、项目中引入nacos服务治理客户端依赖

    <!-- nacos-注册抓取-client -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>

 2、yaml配置

#微服务配置
#在微服务架构中,表示微服务名字
#不同的名字表示功能不一样,相同的名字,功能接口都相同
spring:
  application:
    name: csmall-business
  #微服务cloud配置
  cloud:
    #微服务cloud中组件nacos
    nacos:
      #nacos中注册发现的功能
      discovery:
        #填写nacos的服务端地址
        server-addr: localhost:8848

3、在nacos控制台出现注册信息

配置管理:了解学习nacos配置中心功能。

服务管理:微服务架构中的服务治理功能,在控制台可以看到注册信息,服务状态实例的个数等。

权限控制:用户访问的权限管理,默认使用nacos/nacos。

命名空间:管理不同开发环境的配置隔离。

集群管理:nacos可以配置集群。

yaml详细配置 
临时实例永久实例 

同一个服务,可以启动多个实例,形成一个服务集群。 

当前启动进程是永久实例还是临时实例取决于此配置的值,true 表示临时实例false表示永久实例。

#默认值为true
spring.cloud.nacos.discovery.ephemeral=fasle

永久实例:nacos永远不删除的注册信息,就是永久实例。

临时实例:暂时为某些应用,环境准备的扩容实例,就是定义为临时实例。

例如: 淘宝每一个功能都是一个服务,而且具备多个实例,平日访问是固定流量,所以使用永久实例支持,如果双11来临,流量激增,需要增加临时实例,等待11完成,删除临时实例。

客户端实例的ip地址

服务器ip地址有多个,因为配置多个网卡,有的网卡是外部访问的,有的网卡是局域网网卡,所以客户端web实例在nacos注册希望被别人访问调用一般会考虑是内部调用还是外部调用。

为了防止springboot自动读取的ip地址未必满足实例相互调用的需求,一般情况下,认为确定到底是哪个ip地址,填充到这个属性,携带到nacos。

spring.cloud.nacos.discovery.ip=10.6.15.126
命名空间

开发过程中,使用的开发、测试、上线环境是不同。所以nacos提供隔离环境。默认情况下,只有public公用命名空间。

可以在nacos服务端自定义创建命名空间。

在yaml中配置需要的命名空间

#命名空间配置
spring.cloud.nacos.discovery.namespace: f033ea8e-15ca-4f37-b112-127edc03de9e

创建完新的命名空间,可以在服务列表中看到隔离的注册信息。 

分组配置
#分组
spring.cloud.nacos.discovery.group: 1.0

在同一个命名空间注册的服务实例,可以进行分组操作。主要功能之一:灰度发布。

灰度发布:程序有新版本发布,未更新的老版本也是可以使用的。开发项目,项目发布的特点两个 一个是持续发布,一个是版本发布。持续发布特点中,有灰度发布的概念。此配置为了解决灰度发布的新老版本互相调用,产生版本兼容问题,而做的分组隔离。 

服务心跳检测

服务实例启动后,会在nacos注册一个信息。后续服务实例和nacos服务端会保持一个心跳检测的机制。如果心跳检测结果失败,nacos就会认为这个实例不健康,会剔除实例或者保存不健康状态。

永久实例:故障或宕机不会在心跳检测时,保持健康状态,但是不会剔除。

临时实例:故障或宕机,就会在一段时间之后,进行剔除。

服务心跳检测配置

#临时和永久实例检测不同,秒为单位
#心跳检测间隔时间,更新时间戳
spring.cloud.nacos.discovery.heart-beat-interval=5
#超时心跳删除时间
spring.cloud.nacos.discovery.ip-delete-timeout=20

临时实例:主动发送心跳请求,每次请求都会更新nacos服务端记录的这个实例的时间戳。每隔5秒发送一次。如果nacos服务端发现有某个时间点,应该心跳,但是没有更新时间戳,记录当前实例不健康,如果心跳更新时间超时20秒没更新,则剔除了。

永久实例:心跳不是主动上传的,而是nacos向下探测。

注册信息在nacos中的内存状态 

多实例注册

需求目的: 使用idea的配置启动项,启动3个服务,同时注册nacos。一个服务多个实例,才能形成一个分布式集群,应对高并发、高请求量的场景。

Nacos服务发现(抓取)

nacos提供了接口访问,进行数据的注册/心跳上传。注册的数据是为了让别的服务发现,从而使用其中的ip:port进行远程调用,所以nacos还提供了发现的接口。

模拟服务发现
curl -X GET "http://localhost:8848/nacos/v1/ns/instance/list?serviceName=csmall-business"

总结nacos的服务注册发现机制

  • nacos结构:
    • 角色2个: 服务端(nacos-server进程)、客户端(spring cloud整合到web应用组件)
  • nacos功能:
    • 服务注册:在微服务中,服务注册目的是为了让别的服务发现,获取当前服务信息。
    • 服务发现:为了调用别的服务,从而在nacos进行信息的抓取。

Nacos服务配置中心

应用场景 

在微服务开发过程中,yaml文件、json文件、properties文件等,非常多的冗余重复的内容,不方便统一管理。

例如: 开发环境连接的redis 110.99.88.77:8999,20多个服务全部在开发环境指向这个redis,突然有一天服务器宕机,redis环境换了 111.99.88.77:8999,这时候每个服务都需要改一遍,就会造成一些麻烦。

需求: 将重复的配置,提取到通用的管理平台-nacos

配置中心运行结构 

远程配置案例 

1、在本地进程添加config依赖bootstrap依赖 

<!-- client config nacos-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--springboot版本大于2.3.X,需要引入这个依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

 2、需要引入一个bootstrap.yaml文件

上面的bootstrap依赖,就是为了让springboot启动的时候加载这个bootstrap.yaml文件的。bootstrap.yaml能够被springboot加载,并且先于application.yaml文件加载的。application.yaml配置启动进程的参数配置bootstrap.yaml收集环境信息的参数配置;读取到远程文件配置内容,放回application.yaml使用。

如果远程读的数据和application.yaml冲突的,application.yaml会覆盖远程读取的。

spring:
  profiles:
    #开启不同环境配置
    active: dev
#bootstrap定义不同环境,在同一个文件bootstrap.yaml
#---区分,每个环境中定义名称
---
spring:
  config:
    activate:
      on-profile: dev
  #告诉bootstrap 远程配置中心nacos地址 和我们要读取的配置文件(先读默认的)
  application:
    #所有的application.name都是服务名称
    name: csmall-stock
  cloud:
    nacos:
      config:
        #必须配置的值
        server-addr: localhost:8848
        #文件类型 后缀 默认是properties txt json yaml xml html
        file-extension: yaml
---
spring:
  config:
    activate:
      on-profile: test

通过bootstrap+nacosconfig配置,默认读取的文件格式:

{spring.application.name}-{spring.profiles.active}.{file-extension} 服务名称-环境名称.文件后缀扩展

当前根据bootstrap.yaml的属性,要求默认读取的3个文件:只有服务名称、服务名称.后缀名、服务名称-环境名称.后缀名,任何一个都可以使用。

配置步骤,填写配置的基本信息以及所需内容。提取共用重复参数配置,例如:nacos参数配置、mysql连接配置、mybatis配置等等,编辑到配置内容栏里。注意配置名称的填写

 bootstrap配置nacos读取远程其他属性 

spring:
  cloud:
    nacos:
      config:
        #必须配置的值
        server-addr: localhost:8848
        #文件类型 后缀 默认是properties txt json yaml xml html
        file-extension: yaml
        #前缀,默认是服务名称,不想使用默认值,可以自定义
        prefix: sdlaslkdfjsdlj
        #多环境运行的 namespace 命名空间的id
        namespace: f033ea8e-15ca-4f37-b112-127edc03de9e
        #持续发布中,保证灰度发布 分组
        group: 1.0
        #是否支持刷新.远程配置一旦修改,本地进程内存数据是否刷新,如果刷新,true,不需要重启
        #false 重启,内存才变动 默认也是true
        refresh-enabled: true
        #读取指定的文件
        shared-configs:
          - data-id: redis.yaml
            group: 1.0
            refresh-enable: true
          - data-id: datasource.yaml
            group: 1.0
            refresh-enable: true
          - data-id: es.yaml
            group: 1.0
            refresh-enable: true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值