持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第20天,点击查看活动详情
20、集群配置中心概述
从前面章节的讲解我们可以知道,基本上每个微服务都是使用 application.properties (yml) 进行配置的。在实际应用时, 集群中会存在多个服务,每个服务都可能部署多个实 例,项目开始运营后,如何对集群的配置进行管理?如何实现修改配置而不用重启服务? 这些问题都影响着集群的稳定。假如集群的服务节点配置混乱、修改常规配置还需要重启 服务,这将直接增加运维人员的工作量, 也给服务集群的稳定性带来了潜在的威胁。
Spring Cloud 己经为这些问题提供了解决方案: Spring Cloud Config ,本章将以 Spring Cloud Config 为基础,讲述微服务集群中的配置。
一、概述
1、关于Spring Cloud Config
Spring Cloud Config 为分布式系统提供了配置服务器(简称服务器)和配置客户端 (简 称客户端),通过对它们的配置,可以很好地管理集群中的配置文件。 在实际应用时,我们会将配置文件存放到外部系统(例如 Git、SVN 等) , Spring Cloud Config 的服务器与客户端会到这些外部系统中读取、使用这些配置。
配置服务器主要有以下功能:
- 提供访问配置的服务接口。
- 对属性进行加密和解密。
- 可以简单地嵌入 Spring Boot 的应用中。
配置客户端主要有以下功能:
- 绑定配置服务器,使用远程的属性来初始化 Spring 容器
- 对属性进行加密和解密。
- 属性改变时,可以对它们进行重新加载
- 提供了与配置相关的几个管理端点。
- 在初始化引导程序的上下文时,进行绑定配置服务器和属性解密等工作 当然,也可以实现其他工作。
Spring Cloud 的程序可以通过简单地加入依赖,让其成为一个配置客户端,换言之,集群中的各个节点,理论上都可以成为客户端。
2、应用结构
前面提到了 Spring Cloud Config 的配置服务器与配置客户端,在此,先以图形的方式 展示一下它们的结构,请见图。
如图 9-1 所示,使用 Git ,SVN 等版本的管理系统用于存放配置文件,服务器会到版本 管理系统中获取配置,集群中的各个客户端(服务实例)再到服务器中获取配置。
3、引导程序简介
Spring Cloud 的程序在进行容器初始化时会先建立一个“引导上下文" ( Bootstrap Context ),再创建主应用的上下文。我们的主应用程序上下文通常读取的是 application. yml (或者.properties) 文件,而引导上下文则会读取 bootstrap.yml (或 .properties )文件 。因为 application.yml 的配置会在 bootstrap.yml 后加载,所以如果两份配置文件同时存在,且存在key 相同的配置,则 application.yml 的配置会覆盖 bootstrap.yml 的配置。
主要:Bootstrap 优先于 application 加载,application 的配置会覆盖 Bootstrap 的配置
配置客户端( Config Client )的引导程序在进行引导上下文创建时,会去读取外部的属 性,并且会进行属性解密等工作。在此,大家对引导程序有以下两个认识即可:
- 引导上下文会在主应用上下文前创建,是主应用上下文的父上下文。
- 默认情况下, 配置客户端的引导上下文在创建时会读取远程配置(去配置服务器中 读取)。
4、搭建 SVN 环境
Spring Cloud Config 的服务器默认使用 Git 来管理配置内容,笔者就职的公司大部分都使用 SVN,因此本章也选用 SVN 作为配置管理工具。如果读者己经学会如何搭建 SVN环境,或者有现成的环境,可以跳过本节。 本书所使用的 SVN 服务器为 64 位的 VisualSVN Server ,版本为 3.6.4。安装完成后, 进入安装目录(本例为 C:\Program Files\VisualSVN Server )下的 bin ,单击启动VisualSVN Server.msc ,可进入 SVN 的管理界面。在 Users 菜单中新建 SVN 的用户并设置密码,在Repositories 菜单中新建项目 test-project ,请见图 9-2。 接下来,安装 SVN 客户端,本节使用 TortoiseSVN ,版本为 1.9.7。 安装完成后,可以 将前面新建的 test-project 项目检出( checkout )。