配置中心 Spring Cloud Config: 介绍与实践

举报
溜溜丽 发表于 2021/06/01 11:00:28 2021/06/01
【摘要】 本系列文章将会介绍Spring Cloud 中提供了分布式配置中心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 的后续实现代码。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。