参考文献

  • 黑马讲义

Nacos-服务发现以及配置中心

什么是配置

  • 配置主要有以下几个特点:
    • 配置独立于程序的只读变量
      • 配置对于程序是只读的,程序通过读取配置来改变自己的行为,但是程序不应该去改变配置
    • 配置伴随应用的整个生命周期
      • 配置贯穿于应用的整个生命周期,应用在启动通过读取配置来初始化,在运行时根据配置调整行为.
        • 比如启动时需要读取服务的端口号,系统在运行过程中需要读取定时策略执行定时任务等.
    • 配置可以有多种加载方式
      • 常见的有程序的硬编码,配置文件,环境变量,启动参数,基于数据库等
    • 配置需要治理
      • 同一份程序在不同环境(开发,测试,生产),不同集群(如不同的数据中心)经常需要有不同的配置,所以需要有完善的环境,集群配置管理

什么是配置中心

  • 配置中心的服务流程如下:
    • 用户在配置中心更新配置信息
    • 服务A和服务B及时得到配置更新通知,从配置中心获取配置
  • 总得来说,配置中心就是一种统一管理各种应用配置的基础服务组件
  • 在传统巨型单体应用纷纷转向细粒度微服务架构的历史进程中,配置中心是微服务化不可缺少的一个系统组件,在这种背景下中心化的配置服务即配置中心应运而生,一个合格的配置中心需要满足如下特性:
    • 配置项容易读取和修改
    • 分布式环境应用配置的可管理性,即提供远程管理配置的能力
    • 支持对配置的修改和监视以把控风险
    • 可以产看配置修改的历史记录
    • 不同部署环境下应用配置的隔离性

Nacos数据模型

  • Nacos 数据模型 Key 由三元组唯一确定, Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT_GROUP.

    img
  • DataId细节

    • 代表完整配置文件名称: spring.cloud.nacos.config.name

    • 完整配置文件名称: perfix(前缀)+env(环境)+file-extension(后缀)

      1
      2
      3
      dataId = spring.cloud.nacos.config.name + spring.cloud.nacos.config.file-extension

      dataId = ${prefix}-${spring.profiles.active}.${file-extension}

配置的优先级

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

    • A: 通过spring.cloud.nacos.config.shared-configs支持多个共享Data Id的配置

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      spring:
      cloud:
      nacos:
      config:
      enabled: true
      server-addr: ${NACOS_ADDRESS}
      namespace: xxxx
      file-extension: yaml
      username: xxxx
      password: xxxx
      context-path: /nacos
      shared-configs:
      - data-id: xxx-base-config.yaml
      group: DEFAULT_GROUP
      refresh: true
    • B: 通过spring.cloud.nacos.config.extension-configs支持多个共享Data Id的配置

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      spring:
      cloud:
      nacos:
      config:
      enabled: true
      server-addr: ${NACOS_ADDRESS}
      namespace: xxxx
      file-extension: yaml
      username: xxxx
      password: xxxx
      context-path: /nacos
      extension-configs:
      - data-id: xxx-base-config.yaml
      group: DEFAULT_GROUP
      refresh: true
      - data-id: xxx-base-config2.yaml
      group: TEST_GROUP
      refresh: true
      • 多个Data Id同时配置时,spring.cloud.nacos.config.extension-configs[n].data-id其中n的值越大,优先级越高.
    • C: 通过内部相关规则(应用名,扩展名)自动生成相关的Data Id配置

  • 当三种方式共同使用时,他们的一个优先级关系是: C > B > A