配置管理需求在任何类型的系统中都存在,而且伴随着业务复杂度的提升和技术框架的演变,系统对配置信息的管理方式也会踢出越来越高的要求。
Spring Cloud Config 分部署配置中是Spring家族研发的高可用、分布式配置中心。以下是添配置中心后的系统架构图
一、分布式配置中心方案
1、配置中心与微服务架构
每一个微服务系统都对应有一个配置中心。核心组件是中央仓库和Config服务器。
中央仓库:配置中心的所有配置信息都存放在一个中央仓库中。
Config服务器:Config服务器封装对中央仓库的相关操作,本身也是作为独立的服务存在。Config服务需要提供一种通知机制,确保配置信息发生变化的时候能够通知各个微服务,以便各个微服务技术更新本地服务中的配置数据,可以是轮询、也可以是监听机制。
2、配置信息的分类
微服务架构中配置信息有如下分类:
可按照配置的来源划分:源代码文件、数据库、远程存储媒介等。
按配置的适用环境划分:可分为开发环境、测试环境、预发布环境、生产环境等。
按配置的集成阶段划分:可分为编译时、打包时和运行时。
按照配置加载的方式划分:单次加载型配置、动态加载型配置。
3、配置中心的实现需求
基于配置信息的内容和分类,构建一个配置中心需要满足4个核心需求:
(1)安全性:非开发环境下应用配置保密性,避免关键信息发生泄漏
(2)隔离性:不同部署环境下应用配置的隔离性,比如非生产环境的配置不能用于生产环境。
(3)一致性:同一部署环境下的服务应用配置的一致性,即所有服务使用同一份配置信息。
(4)易管理性:分布式环境下应用配置的可管理性,即提供远程管理配置的能力
集中式配置中心示例图
二、配置中心实现工具
基于配置中心的时间需求,业界存在一批典型的分布式配置中心实现工具:
Etcd:是一个轻量级分布式键-值对数据库,基于Raft协议提供了集群环境的服务发现和人注册机制。在功能上实现了数据变更监视、目录监听、分布式锁原子操作等特性并通过这些特性来管理节点状态。
consul:是google开源的一个使用go语言开发的服务发现和配置管理中心服务。内置了服务注册和发现框架、分布式一致性协议实现、健康检查、键值对存储、多数据中心方案等诸多特性。在内部实现上,Consul使用了一种称之为SWIM的协议完成分布式环境下的数据计算。
Zookeeper:是同一种分布式协调工具,目前在分布式配置、分布式集群管理、leader选举等领域应用非常广泛。
Disconf:是由百度开源的一个分部署配置管理工具,与Spring框架有很好的集成,在使用上也提供了友好的web管理界面,从实现机制上讲,Disconf把配置信息存储在MySQL中,基于Zookeeper提供监听机制实现数据的实时推送。
Diamond:由阿里巴巴提供,同样把配置数据存储在MySQL中,但在获取数据时不是使用推送,而是每个一段时间进行全部数据拉取,实现过程比较简单。值支持键值对结果的数据。
只要具备数据发布和订阅功能,就能实现分布式配置中心。
三、构建配置中心服务器
1、想要构建Config服务器,需要咱Maven中引入:spring-cluod-config-server 和spring-cloud-starter-config。
在启动类上加上@ConfigServerApplication注解,同时自身也是一个服务需要在Eureka注册,需要加上@EnableEurekaClinet注解。
2、实现基于本地文件系统的配置方案
Spring Config对配置文件的命名做了约束,使用label和profile概念指定配置信息的版本及运行环境,其中label标识配置的版本控制信息,而profile中的Dev、prod、test分别标识开发、生产、测试环境。支持properties和yml文件格式。
3、实现基于Git的配置方案
Spring Cloud Config 支持配置信息放在配置服务器本地文件系统中,也支持放在远程仓库中。
四、使用配置服务
1、访问配置项
初始化客户端需要引入spring-cloud-config-client
2、通过@Value注解注入配置信息
3、整合数据访问功能
五、配置数据的安全性
实现Config服务器的用户认证,需要添加相应的安全配置项,引入spring-boot-starter-security同时添加配置,而在各个微服务中需要配置安全中的用户和密码才能进行访问。
六、Spring Cloud Config 特性
1、Spring Cloud Config 对比 Zookeeper
配置中心在实现上需要满足高效获取、实时感知、分布式访问等多个要求。
1.分布式协调机制通过一定的方法,确保配置信息在分布式环境中的各个节点中得到实时、一致的管理。
Spring Cloud Config 基本架构
区别在于:配置的存储方式不同、配置的管理方式不同、配置变化的通知机制不同
2、Spring Cloud Config 高可用
配置中心作为整个微服务的架构运行基础服务,需要确保其可用性。
传统模式是所有的Config服务器统一指向同一个Git仓库,这样所有的配置内容就通过基于git的共享文件系统进行维护。
服务模式:
Spring Cloud Config 服务本身也是一个微服务,跟其他服务一样,也可以注册到Eureka上,让其他服务提供者或消费者通过注册中心进行服务发现和获取。