SpringCloud Config 分布式配置中心

分布式系统面临着配置问题

微服务意味着要将单体应用中的业务拆分成一个一个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。SpringCloud提供了SpringCloudConfig来解决这个问题。

SpringCloudConfig是什么

SpringCloudConfig为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。SpringCloudConfig分为服务端和客户端两个部分。

服务端

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

客户端

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

SpringCloudConfig的作用

  • 集中管理配置文件
  • 不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/release
  • 运行期间动态调整配置,不再需要在每个服务器部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息
  • 当配置发生变动时,服务不在需要重启即可感知到配置文件的变化并应用新的配置
  • 将配置信息以REST接口的形式暴露

SpringCloud Bus消息总线 动态刷新配置

SpringCloudBus和SpringCloudConfig使用可以实现配置的动态刷新。

Aservices21.Push UpdateConfig2.SourceConfig3.POST/bus/refresh4b.PullUpdate5b.PullUpdate4a.send Message5a.Receive MessageGitRepositoryuserConfigSereveruserAPP1APP2CloudBusBservices1.Push UpdateConfig2.SourceConfig3.POST/bus/refresh4b.PullUpdate5b.PullUpdate4a.send Message5a.Receive MessageAPP1userGitRepositoryConfigSereveruserAPP2CloudBus

SpringCloudBus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了Java的事件处理机制和消息中间件的功能。SpringCloudBus目前支持RabbitMQKafka

SpringCloudBus能管理和传播分布式系统间的消息,就像一个分布式执行器,可用于广播状态更改、事件推送等等。也可以当作微服务之间的通信信道。

为什么被称为总线

什么是总线

在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个共用的消息主题,并让系统中所有微服务实例都连接上来。由于该主题产生的消息会被所有实例监听和消费,所以称它为消息总线。在总线上的各个实例,都可以方便地广播一些需要让其他连接在该主题上的实例都知道的消息。

基本原理

ConfigClient实例都监听MQ中的同一个Topic(默认是SpringCloudBus)。当一个服务刷新数据的时候,他会把这个信息放入到Topic中,这样其他监听同一个Topic的服务就能得到通知,然后去更新自身的配置。