接上篇《30.使用Sidecar支持异构平台的微服务》 Spring Cloud版本为Finchley.SR2版
上一篇我们完结了有关Zuul所有相关知识,本篇我们来开始学习Spring Cloud的统一配置管理(Spring Cloud Config)。
本部分官方文档:https://cloud.spring.io/spring-cloud-static/Finchley.SR4/single/spring-cloud.html#_spring_cloud_config 注:好像Finchley.SR2的文档已经挂了,最新的是Finchley.SR4的文档。
一、为什么要统一配置管理
Spring Cloud Config顾名思义是一个跟配置有关的组件,即统一管理微服务配置的一个组件。
那么为什么需要统一管理微服务的配置呢?我们来谈谈统一管理配置的好处:
1、集中管理
我们的微服务集群里可能有成百上千的微服务,如果我们分散的来管理每一个微服务的配置,会很繁琐,例如数据源如果变化了,每一个微服务的每一个实例的配置都要进行修改,工作量很大。
那么如果我们将所有的微服务的配置,统一管理在一个地方,只需要修改这个地方的配置,所有微服务的配置都会更新生效,这样会大大提高我们的工作效率。
2、不同环境不同配置
一般我们开发项目的时候,都会有开发环境、测试环境、预生产环境、生产环境等多种环境下的应用,每种环境下的应用配置是不一样的。这个时候我们使用集中配置,可以根据不同情况,切换不同配置打包发布。
3、运行期间动态调整配置
有时候我们的服务在运行期间,需要调整一些配置参数,但是又不想要停机(例如动态调大数据源的并发数),此时使用Spring Cloud Config就可以实现配置动态调整。
4、自动刷新
使用Spring Cloud Config动态调整配置后,不需要重启应用,会自动刷新应用的配置参数,使用新的配置。
综上所述,在微服务集群环境下,使用Spring Cloud Config来进行统一配置管理,是十分有必要的。
二、Spring Cloud Config简介
1、简介
Spring Cloud Config为分布式系统外部化配置提供了服务器端和客户端的支持,它包括Config Server和Config Client两部分。由于Config Server和Config Client都实现了对Spring Environment和PropertySource抽象的映射,因此,Spring Cloud Config非常适合Spring应用程序,当然也可与任何其他语言编写的应用程序配合使用。
Config Server是一个可横向拓展、集中式的配置服务器,它用于集中管理应用程序各个环境下的配置,默认使用Git存储配置内容(也可使用Subversion、本地文件系统或Vault存储配置),因此可以很方便地实现对配置的版本控制与内容审计。
Config Client是Config Server的客户端,用于操作存储在Config Server中的配置属性。
2、架构图
每个微服务都会集成一个“Config Client”,然后都通过“Config Server”获取相应环境(dev开发、stage预发布、prod生产)的配置。然后Config Server再从后端存储中(上图为Git)拉取配置参数、属性。
总的来说就是各个微服务通过Config客户端,向Config服务端发起读配置的请求,而Config服务端就是一个代理,它负责向后端存储拉取客户端请求的配置,返回给客户端,达到配置集中在一个后端存储上的效果。
注:除了Spring Cloud Config,还有其它一些产品也实现了统一配置管理,例如百度的“disconf”,阿里的“diamond”,携程的“apollo”。