配置中心 Spring Cloud Config: 介绍与实践
本系列文章将会介绍Spring Cloud 中提供了分布式配置中心Spring Cloud Config。应用服务中除了实现系统功能的代码,还需要连接资源和其它应用,经常有很多需要在外部配置的数据去调整应用的行为,如切换不同的数据库,设置功能开关等。随着微服务的不断增加,需要系统具备可伸缩和可扩展性,除此之外就是管理相当多的服务实例的配置数据。在应用的开发阶段由各个服务自治,但是到了生产环境之后会给运维带来很大的麻烦,特别是微服务的规模比较大,配置的更新更为麻烦。为此,系统需要建立一个统一的配置管理中心。
常见的配置中心的实现方法有:
- 硬编码,缺点是需要修改代码,风险大;
- 放在xml等配置文件中,和应用一起打包,缺点是需要重新打包和重启;
- 文件系统中,缺点是依赖操作系统等;
- 读取系统的环境变量,缺点是有大量的配置需要人工设置到环境变量中,不便于管理,且依赖平台;
- 云端存储,缺点是与其他应用耦合。
在分布式系统中,业界关于分布式配置中心有多种开源的组件,如携程开源的Apollo、百度的Disconf、淘宝的Diamond等。Spring Cloud 中提供了分布式配置中心Spring Cloud Config,为外部配置提供了客户端和服务端的支持。
基于Config服务器,就可以集中管理各种环境下的各种应用的配置信息。客户端和服务端匹配到Spring中的Environment和PropertySource的概念,所以这不仅非常适用于所有的Spring应用,而且对于任意语言的应用都能够适用。一个应用可能有多个环境,从dev开发到test测试,再到生产环境,你可以管理这些不同环境下的配置,而且能够确保应用在环境迁移后有完整的配置能够正常运行。
Config服务端默认的存储实现是git,这能够很容易地支持配置环境的标签版本,而且有各种工具方便地管理这些配置内容。Config配置服务还支持多种仓库的实现方式,如本地文件系统、SVN等。
基础应用
在配置中心的基础应用中,将会包括两个部分:配置服务器和配置客户端。Config Server即配置服务器,为配置客户端提供其对应的配置信息,配置信息的来源为配置仓库,启动时需要拉取配置仓库的信息,缓存到本地仓库中;Config Client即配置客户端,只会在配置文件中配置必要的信息,如指定其获取配置的Config Server,启动时从配置服务器获取配置信息,并支持动态刷新配置仓库中的属性值。
下面我们首先通过 Spring Cloud Config 的基础应用来熟悉下这个组件。
1. pom中的jars
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
</dependencies>
jar包引入了config的starter。由于需要从配置服务器获取配置信息,需要服务发现组件consul的starter。
2. 入口类
@SpringBootApplication
@EnableDiscoveryClient
public class ConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(CloudApplication.class, args);
}
}
3. 启动类配置文件
server:
port: 8000
spring:
application:
name: config-client
cloud:
config:
label: master
discovery:
enabled: true
service-id: config-server
enabled: true
fail-fast: true
profile: dev
consul:
host: localhost
port: 8500
discovery:
ip-address: localhost
port: ${server.port}
instance-id: config-client-${server.port}
service-name: config-client
启动类的配置信息相对比较简单,可以将除了服务发现之外的配置都可以放到配置中心。在启动类配置文件中,首先需要指定consul注册中心的配置;其次,spring.cloud.config的相关配置包括label、profile、discovery的service-id,即配置服务器的服务名称。
小结
本文主要介绍了分布式配置中心的相关概念以及基本的实践。在分布式系统中,业界关于分布式配置中心有多种开源的组件,如携程开源的Apollo、百度的Disconf、淘宝的Diamond等。Spring Cloud 中提供了分布式配置中心Spring Cloud Config,为外部配置提供了客户端和服务端的支持。
下面的文章将会继续介绍 Spring cloud config 的后续实现代码。
- 点赞
- 收藏
- 关注作者
评论(0)