本节将揭开配置中心的神秘面纱,清晰阐释什么是配置中心、它的作用以及为何需要配置中心。此外,还将介绍当前流行的微服务配置中心,帮助读者了解市场中的主流选项,为深入学习 Spring Cloud Config 配置中心筑牢基础。

一、配置中心简介

1.1  什么是配置中心

配置中心是一个用于集中管理和存储微服务配置信息的组件,如图9-1所示。它提供了一种统一的方式来管理和存储应用程序在不同环境(如开发、测试、生产等)中的配置信息,包括应用程序的属性、环境变量、数据库连接、第三方服务的配置等。

图片

在传统的应用架构中,应用程序的配置信息通常以配置文件的形式直接嵌入应用的代码或部署包中。然而,随着应用规模的扩大和分布式系统的发展,这种方式存在诸多问题,说明如下。

  • 管理困难:当应用数量众多且部署在不同环境时,分别管理每个应用的配置文件会变得非常复杂和耗时。

  • 缺乏灵活性:如果需要对配置进行更改,需要手动修改每个应用的配置文件,然后重新部署应用,这使得配置的更新不够灵活和及时。

  • 环境不一致:容易导致不同环境中的配置不一致,从而引发应用在不同环境下的行为差异,增加了故障排查和维护的难度。

配置中心通过将配置信息从应用中剥离出来,集中存储和管理,解决了上述问题。开发人员、运维人员或其他相关人员可以通过配置中心的管理界面或 API 来添加、修改、查询和删除配置信息。应用程序在运行时,通过与配置中心进行通信,动态获取所需的配置数据,从而实现了配置的集中管理、动态更新和灵活配置。

配置中心在现代软件系统中具有不可或缺的地位。它解决了传统配置管理的诸多难题,提高了配置管理的效率、灵活性和可靠性,为系统的稳定运行和快速迭代提供了有力支持。

1.2  配置中心的作用

微服务配置中心是一种集中式管理和分发配置的工具,提供了一种可靠的方式来管理微服务应用程序的配置。它允许开发人员将配置信息存储在一个集中的位置,并通过API或其他机制将配置提供给各个微服务实例。微服务配置中心的作用和优势如下。

(1)集中管理配置:微服务配置中心提供了一个集中管理和存储微服务配置信息的平台。开发者可以将所有微服务的配置信息集中存储在配置中心,而不是分散在各个微服务中。这样可以方便地对配置进行修改、更新和管理,而无须重新部署微服务。

(2)动态更新配置:微服务配置中心支持动态更新配置,即在微服务运行时可以动态地获取最新的配置信息。这使得开发者可以在不重启微服务的情况下修改配置,实现配置的实时更新。这对于需要频繁修改配置的场景非常有用,如调整日志级别、修改数据库连接等。

(3)配置版本管理:微服务配置中心通常支持配置的版本管理,可以记录和管理不同版本的配置信息。这样可以方便地回滚到之前的配置版本,或者针对不同环境(如开发、测试、生产)使用不同的配置版本。配置版本管理可以提高配置的可控性和可追溯性。

(4)配置的安全性和权限控制:微服务配置中心可以提供安全性和权限控制机制,确保只有授权的用户或服务可以访问和修改配置信息。这样可以保护敏感的配置数据,防止配置信息被未授权的人员访问或篡改。配置中心可以通过身份验证、访问控制列表等方式实现权限控制。

(5)配置的分布式管理:微服务配置中心通常支持分布式部署,可以将配置信息复制到多个节点上,实现高可用性和容错性。这样即使某个节点发生故障,仍然可以从其他节点获取配置信息。分布式配置中心可以提高系统的可靠性和稳定性。

(6)配置的统一性和一致性:微服务配置中心可以确保所有微服务使用相同的配置信息,避免了配置的不一致性和冲突。开发者可以通过配置中心统一管理和分发配置,确保所有微服务在不同环境下的配置一致性,减少了配置管理的复杂性。

总而言之,微服务配置中心提供了一种集中化管理和动态更新配置的方式来帮助我们更好地管理和维护微服务的配置信息,使得微服务架构中的配置管理更加灵活、高效和可维护。它可以帮助开发人员简化配置管理的复杂性,提高系统的可靠性和可扩展性。

1.3  为什么需要配置中心

在当今数字化的时代,软件系统的规模和复杂性不断增长,尤其是随着微服务架构的广泛应用,配置管理成为系统开发和运维中的关键环节,而配置中心在其中发挥着至关重要的作用。

在没有配置中心的传统模式下,应用程序的配置通常以配置文件的形式与应用代码紧密耦合。这种方式在简单的应用场景中或许能够满足需求,但随着系统规模的扩大和复杂度的提高,逐渐暴露出了一系列问题。

1. 配置分散与管理困难

在微服务架构下,每个模块或服务都有自己的配置文件。这些配置文件可能分布在不同的服务器和目录下,使得配置的查找、修改和维护变得异常困难。一旦需要对某个配置项进行更改,可能需要在多个地方进行相同的操作,容易出现遗漏或错误。

2. 环境切换与配置一致性问题

在开发、测试、预生产和生产等不同的环境中,应用的配置往往存在差异。如果通过手动方式来维护不同环境的配置文件,很难保证配置的一致性。环境之间的配置差异可能导致应用在不同环境下的行为不一致,增加了问题排查和调试的难度。

3. 配置更新的实时性与可靠性

当业务需求发生变化,需要修改配置时,传统模式往往需要重新部署应用才能使配置生效。这种方式不仅效率低下,而且在部署过程中可能会出现服务中断,影响系统的可用性。此外,如果配置更新失败,很难进行回滚操作,从而可能导致系统出现故障。为了解决传统配置管理的问题,配置中心应运而生。通过配置中心,能够将所有服务的配置信息进行集中存储与管理。配置中心承担着存储、管理以及分发配置信息的任务,让配置更新变得更为集中和高效。当需要对配置信息做出修改时,仅需在配置中心进行更改,就能实现所有相关服务配置的自动更新,大幅降低了更新配置的成本与风险。

传统模式与微服务模式的配置信息对比如图9-2所示。

图片

1.4  当前流行的微服务配置中心

当前流行的微服务配置中心产品有很多,其中比较常用的包括Spring Cloud Config、Consul、Apollo、Nacos、Etcd等。它们各有优缺点,表9-1是它们的简要对比。

表9-1  当前微服务配置中心产品对比

图片

综上所述,这些微服务配置中心都具有一定的特点和功能,到底选择哪个微服务配置中心需要根据具体的需求来选择。如果只是简单地配置管理,Spring Cloud Config足够使用了;如果需要支持多数据中心或更多高级功能,可以考虑使用Apollo、Nacos。

二、 Spring Cloud Config简介

前面阐述了配置中心的定义、作用与概念,还介绍了当前流程中的配置中心产品。其中,Spring Cloud Config在Spring Cloud生态中占据着极为重要的地位。接下来,我们将详细介绍什么是Spring Cloud Config,并且深入剖析其工作原理,以使读者能够对Spring Cloud Config形成一个全面且清晰的认识。

2.1  什么是Spring Cloud Config

Spring Cloud Config是Spring Cloud生态系统中的一个配置管理工具。它主要用于集中式管理应用程序在不同环境(如开发、测试、生产等)中的配置信息。通过将配置数据存储在一个中央存储库中,例如Git仓库、本地文件系统或数据库,从而实现配置的统一管理和版本控制,如图9-3所示。

图片

Spring Cloud Config 允许应用程序在运行时动态获取所需的配置,这使得配置的修改和更新可以在不重新部署应用程序的情况下生效,增强了应用的灵活性和可维护性,而且支持不同的配置格式,如Properties、YML等,并且能够为不同的应用实例提供特定的配置。

Spring Cloud Config具有以下优势:

(1)与Spring生态系统的无缝集成。 作为Spring Cloud的一部分,Spring Cloud Config与Spring Boot等Spring框架能够无缝集成,开发人员可以轻松地将其引入现有的Spring应用项目中,降低了学习成本和开发难度。

(2)灵活性和可扩展性。Spring Cloud Config支持多种配置存储后端和配置格式,并且可以根据业务需求进行定制化开发和扩展,满足不同项目的特定需求。

(3)社区支持和活跃度。Spring Cloud 拥有庞大的社区和活跃的开发者群体,Spring Cloud Config 作为其中的重要组件,拥有丰富的文档、教程和案例资源,遇到问题时可以方便地从社区中获得帮助和支持。

总的来说,Spring Cloud Config为微服务架构中的配置管理提供了一种高效、可靠、灵活的解决方案,可以帮助开发团队更好地应对日益复杂的分布式系统配置管理挑战,提高了开发效率和系统的稳定性,是构建现代化微服务应用的重要工具。

2.2  Spring Cloud Config的工作原理

Spring Cloud Config主要由服务端(spring-cloud-config-server)和客户端spring-cloud-starter-config两部分组成。

  • 服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息、加密/解密信息等访问接口。

  • 客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并且在启动的时候从配置中心获取和加载配置信息。配置服务器默认采用Git来存储配置信息,这样有助于对环境配置进行版本管理,并且可以通过Git客户端工具来方便地管理和访问配置内容。

简单来说,Spring Cloud Config能将各个应用/系统/模块的配置文件(Git 或SVN)进行统一管理,为分布式系统中的外部化配置提供服务器和客户端支持。使用 Config 服务器,可以在中心位置管理所有环境中应用程序的外部属性。

Spring Cloud Config的工作流程如图9-4所示。

图片

Spring Cloud Config的工作流程说明如下:

(1)服务启动,客户端应用通过向 Spring Cloud Config 服务器发送请求来获取配置信息。

(2)Spring Cloud Config 服务器根据客户端应用指定的应用名称、环境和配置文件等参数,从后端存储中检索相应的配置数据,并将其返回给客户端应用。

(3)客户端应用接收到配置数据后,将其加载到应用的运行环境中,从而实现应用的配置。

三、使用Spring Cloud Config构建微服务配置中心

前面介绍了配置中心的基本概念,了解这些核心概念对于理解和应用微服务配置中心非常重要。Spring Cloud框架提供了Spring Cloud Config 组件用于实现微服务配置中心。这个组件可以与各种配置存储后端集成,例如Git、SVN、本地文件系统等。此外,Spring Cloud Config还提供了易于使用的REST API和客户端库,使微服务可以轻松地从配置中心获取配置信息。本节将深入探讨如何构建微服务配置中心。

3.1  创建配置中心服务端

前面介绍了Spring Cloud Config 的架构,接下来使用Spring Cloud Config 构建配置中心服务端。

准备工作:开始之前,需要创建一个简单的微服务工程,可以从原有的项目中复制过来,然后创建Config Server模块:springcloud-config-server,作为配置中心服务端。

step 1:引入相关依赖。

创建Config Server模块:springcloud-config-server,并修改pom.xml文件,引入相关依赖。示例代码如下。

<!--Config服务端--><dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-config-server</artifactId></dependency>

step 2:启用@EnableConfigServer。

修改Config Server模块的启动类,使用@EnableConfigServer注解标注此服务为Config Server服务端。示例代码如下:

@SpringBootApplication@EnableEurekaClient@EnableConfigServerpublic class ConfigServerApplication {	public static void main(String[] args) {			SpringApplication.run(ConfigServerApplication.class, args		);	}}

step 3:创建远程Git仓库。

远程配置中心需要结合Git使用,在GitHub或者Gitee创建一个仓库,用于保存各种配置文件,这里使用Gitee作为远程仓库,创建仓库的过程这里不再赘述,如图9-5所示。

图片

step 4:配置远程仓库地址。

修改Config Server模块的application.yml全局配置文件,增加远程仓库地址等配置,示例代码如下:

spring:  application:    name: config-server  cloud:    config:      server:        git:          uri: https://gitee.com/weizhong1988/spring-cloud-config-repo.gitserver:  port: 8060#eureka的访问方式,增加Eureka的账号和密码eureka:  client:  service-url:    defaultZone: http://localhost:8761/eureka/

经过上述配置,服务启动时,config-server服务端会自动连接配置的GitHub或者Gitee仓库,获取全部的配置内容。

 step 5:验证测试。

配置完成之后,启动eureka-server服务和config-server服务,在浏览器中访问http://localhost:8060/service-consumer/dev/master,验证配置文件是否能读取成功,如图9-6所示。

图片

3.2  创建配置中心客户端

前面介绍了如何创建Config Server配置中心。只需要引入依赖,并增加@EnableConfigServer注解即可。接下来,将演示应用微服务(即Config Client)如何读取Config Server配置中心的配置信息。

准备工作:这里使用之前的服务消费者consumer-provider作为配置中心的客户端。读者需要构建一个基础的微服务工程,或者复制之前的项目。

 step 1:修改服务消费者consumer-provider模块,引入相关依赖,这里客户端的依赖为spring-cloud-starter-config,与服务端使用的依赖有所不同。具体代码如下:

<!—Config组件--><dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-config</artifactId></dependency>

step 2:修改配置文件。

修改服务消费者consumer-provider模块的application.yml配置文件,并增加配置中心的相关信息。具体代码如下所示:

server:  port: 8081spring:  application:    name: service-consumer  cloud:    config:      uri: http://localhost:8060/      label: master      name: service-consumer      profile: dev#eureka的访问方式eureka:  client:    service-url:      defaultZone: http://localhost:8761/eureka/

经过上述配置,service-consumer服务启动后,会从config-server服务端获取全部配置信息,config-server服务端连接配置的GitHub或者Gitee仓库,从而获取仓库内的全部配置内容。

注意:在实际项目中,部分项目可能会使用bootstrap.yml作为配置中心的配置文件,而非 application.yml。主要差异在于:application.yml用于常规的资源配置,而 bootstrap.properties用于应用程序启动时提前加载关键配置信息,且它的优先级更高。

step 3:读取配置信息。

修改服务消费者consumer-provider模块,增加OrderController并在控制器中读取配置中心的相关配置。具体代码如下:

@RestControllerpublic class OrderController {    @Value("${application.info}")    private String applicationInfo;    @GetMapping("/applicationInfo")    public String getApplicationInfo() {        return applicationInfo;    }}

step 4:测试验证。

配置完成后,分别启动eureka-server、config-server和service-consumer等服务,然后在浏览器中访问http://localhost:8081/applicationInfo接口,即可获得相应的配置信息,如图9-7所示。

图片

以上,我们使用Spring Cloud 实现了简单的微服务网关,实现了请求转发的功能。

最后

上面我们介绍了什么是微服务注册中心,它的核心功能是什么,为什么需要注册中心,然后使用Spring Cloud Config实现了注册中心的功能。

更多推荐