03-Spring Cloud Config配置服务器控制配置
配置与代码分离
为什么需要Spring Cloud Config
在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。Spring Cloud Config支持配置服务放在配置服务的内存中(本地),也支持放在远程Git仓库中。
几个概念
配置漂移
当构建好的服务被部署在服务器上后,由于有人登陆该服务器并修改了一个东西,导致该服务的配置被更改,从而使机器上的实际配置与源代码管理的配置不一致。这种现象就叫配置漂移。
不可变服务器
设置服务器不能被手动修改,只能通过自动化部署形式更改配置。这种服务器就叫不可变服务器。
基于云的微服务开发强调以下几点
1. 应用程序的配置与正在部署的实际代码完全分离
2. 构建服务器,应用程序以及一个不可变的镜像他们在各环境中进行提升时永远不会发生变化
3. 在服务器启动时通过环境变量注入应用程序配置信息,或者在微服务启动是通过集中式存储长裤读取应用程序配置信息
管理配置的原则
1.分离 服务配置信息与服务实际物理部署完全分离
2.抽象 访问配置数据的功能抽象到一个服务接口中
3.集中 将应用程序配置集中在尽可能少的储存库中
4.稳定 保证高可用和冗余
配置信息和实际代码分开之后,开发人员将创建一个需要进行管理和版本控制的外部依赖项.管理不当的应用程序配置很容易滋生难以检测的bug和计划外的中断。
配置管理架构(配置原则的应用)
1.微服务实例启动并获取配置信息
当一个服务实例出现(启用)时,他将调用一个服务端点来读取其所在环境的特定配置信息.配置管理连接信息(连接凭据,服务端点等)将在微服务启动时被传递给微服务.
2.实际配置驻留在储存库中
基于配置存储库的实现,可以选择使用不同的实现来保存配置数据.配置仓库的实现选择可以包括源代码控制下的文件,关系数据库或键值数据库.
3.开发人员的更改将通过构建和部署管道推送到配置储存库中
配置数据的实际管理与程序的部署方式无关.
4.通知配置更改的应用程序自行刷新(会使用到Spring Cloud Bus实现配置自动更新)
实施选择
配置管理解决方案
项目名称 | 描述 | 特点 |
Etcd | 编写亍 Go 诧言的开源项目。用亍服务发现 和键值管理。采用 raft( https://raft.github.io/)协议的分布式 计算模型。 |
非常快速和可伸缩 分布式的 命仓行驱劢 易亍使用和设置 |
Eureka | 由 Netflix 撰写。经过充分的测试。用于服 务发现和键值管理 |
分布式键值存储。 柔性;通迆配置提供劢态客 户端刷新的开箱即用功能 |
Consul | 由 Hashicorp 编写。 特性与 Etcd 和 Eureka 类似,但使用不同的算法的分布式 计算模型(SWIM protocol; https://www.cs.cornell.edu/~asdas/res earch/dsn02-swim.pdf) |
快速 提供直接与 DNS 集成的本 地服务发现 不提供客户端动态刷新权限 开箱即用 |
ZooKeeper | 提供分布式锁定功能的 Apache 项目。通常用作访问键值数据的配置管理解决方案 | 常用作访问键值数据的配置管理解决方案。使用最复杂的 可用亍配置管理,但应该考虑除非你已经使用 ZooKeeper 作为你架构的一部分 |
Spring Cloud Config | 提供不同后端的通用配置管理解决方案的 开放源代码项目。它可以与作为后端的Git、 Eureka 和 Consul 整合 |
提供不同后端的通用配置管理解决方案的 开放源代码项目。它可以与作为后端的Git、 Eureka 和 Consul 整合 |
使用Spring Cloud Config的原因
1. 易于搭建和使用
2. 与SpringBoot紧密集成,可以使用一些简易的注解来读取所有的应用程序的配置数据.
3. Spring Cloud Config配置服务器提供多个后端用于存储配置数据.
4. 可以直接与Git源控制平台集成(其他工具需要手动集成)
构建SpringCloud配置服务器
史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)(Finchley版本) https://blog.****.net/forezp/article/details/81041028