前言
参考资料:
《Spring Microservices in Action》
《Spring Cloud Alibaba 微服务原理与实战》
《B站 尚硅谷 SpringCloud 框架开发教程 周阳》
将配置写入一个 config 常量类往往会有些问题,每次对配置进行更改时,应用程序都必须重新编译和重新部署;
在少量的应用程序中可以将配置写在低层级的属性文件,如:YAML、JSON 或 XML;其中包含数据库和中间件连接信息,以及驱动应用程序行为的相关元数据;
但是在处理可能包含数百个微服务的基于云的应用程序,其中每个微服务可能会运行多个服务实例时,需要对配置进行集中管理;
1. 配置管理基础知识
1.1 为什么需要配置管理
- 将配置写入一个 config 常量类往往会有些问题,每次对配置进行更改时,应用程序都必须重新编译和重新部署;
- 在少量的应用程序中可以将配置写在低层级的属性文件,如:YAML、JSON 或 XML;其中包含数据库和中间件连接信息,以及驱动应用程序行为的相关元数据;
- 但是在处理可能包含数百个微服务的基于云的应用程序,其中每个微服务可能会运行多个服务实例时,需要对配置进行集中管理;
1.2 配置管理需要遵从的四个原则
- 分离:将服务配置信息与服务的实际物理部署完全分开;
- 抽象:将访问配置数据的功能抽象到一个服务接口;
- 集中:将应用程序配置集中在尽可能少的存储库中 ;
- 稳定:保证其高可用和冗余;
1.3 配置在什么时候被读取
1.4 配置管理的架构概念
- 配置管理的连接信息(连接凭据、服务端点等)将在微服务启动时被传递给微服务;
- 配置管理的更改通常通过构建和部署管道来处理,其中配置的更改可以通过版本信息进行标记,并通过不同的环境进行部署;
1.5 配置管理有多种选择
1.6 Spring Cloud 的三种配置文件(.xml .yml 与 .properties)
-
.xml
- 一种可扩展标记语言;
- 用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型;
- 是一种允许用户对自己的标记语言进行定义的源语言;
- 适合 Web 传输;
- 用于引入
pom
依赖文件;
-
.yml(下称 yml)
- 一种比 XML 更为简单易读的序列化语言,更像是一种数据格式;
- 也称 yaml,yml 文件扩展名是 yaml 的缩写;
- 以数据为中心,比 json、xml 等更适合做配置文件;
- 复杂配置建议用 yml。易读性强;
- 支持的多种编程语言种类(支持python、go等大量编程语言);
- 支持中文内容;
- 支持列表;
- 优先加载,会被后加载的 properties 覆盖;
-
.properties(下称 properties)
- 作用同 yml;
- 简单配置用 properties;
- properties 支持中文内容只能用 unicode 编码;
- 只支持键值对数据;
- 加载优先级低,会覆盖 yml 的内容;
1.7 Spring Cloud 的两类配置文件(application 与 bootstrap)
-
application.yml 或 application.properties(以下统称:application)
- 主要用于 Spring Boot 项目的自动化配置;
- 是用户级的资源配置项;
-
bootstrap.yml 或 bootstrap.properties(以下统称:bootstrap)
- 是系统级的,由父
ApplicationContext
加载,加载优先于 application; - 主要用于从额外的资源来加载配置信息;
- 可以在本地外部配置文件中解密属性(用于加密/解密的场景);
- 默认不能被本地相同配置覆盖;
- bootstrap可以理解成系统级别的一些参数配置,这些参数一般是不会变动的;
- 使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;
- 需要注意一个例外:若 bootstrap 里面配置了 server.port=8888,而 application 里面配置了 server.port=7777。事实上,项目启动时的端口号是 7777(bootstrap不关心这个属性);
- 是系统级的,由父
-
相同点:
- 共用一个环境,是任何 Spring 应用程序的外部来源;
1.8 目前几种流行的配置中心对比
名称 | 厂商 | 特点 |
---|---|---|
Config | Spring Cloud | 非分布式键值存储;提供了对 Spring 和非 Spring 服务的紧密集成;可以使用多个后端来存储配置数据 , 包括共享文件系统、Eureka、Consul 和 Git 等 |
Nacos | Alibaba | 具有 CRUD、版本管理、灰度管理、监听管理、推送轨迹、聚合数据等功能 |
2. Spring Cloud Config
SpringCloud Config 为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置;
3. Alibaba Nacos
Nacos 致力于解决微服务中的统一配置、服务注册与发现等问题。它提供了一组简单易用的特性集,帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理;
- 点击跳转:微服务架构 | 2.2 Alibaba Nacos 的统一配置管理
- 点击跳转:微服务架构 | *2.3 Spring Cloud 启动及加载配置文件源码分析(以 Nacos 为例)
- 点击跳转:微服务架构 | *2.4 Nacos 获取配置与事件订阅机制的源码分析
- 点击跳转:微服务架构 | *2.5 Nacos 长轮询定时机制的源码分析