文章目录
前言(为什么需要配置中心)
- 随分布式微服务的发展,服务节点越来越多,配置问题逐渐显现出来:
- 配置文件无法区分环境。微服务项目可能会有多个环境,例如:测试环境、预发布环境、生产环境。每一个环境所使用的配置理论上都是不同的,一旦需要修改,就需要我们去各个微服务下手动维护,这比较困难。
- 配置文件无法实时更新。我们修改了配置文件之后,必须重新启动微服务才能使配置生效,这对一个正在运行的项目来说是非常不友好的。
- 随着程序功能的日益复杂,程序的配置日益增多,各种功能的开关、参数的配置、服务器的地址大量模块使用各自的配置,可能导致运维繁琐、管理混乱、各个节点配置文件不一致对配置的期望也越来越高,配置修改后实时生效,灰度发布, 版本管理 ,环境区分,完善的权限、审核机制等。
一、配置中心是什么?
统一管理配置, 快速切换各个环境的配置
1.1 Nacos架构
-
Nacos配置中心分为Server与Client,server采用Java编写,为client提供配置服务。
-
Client可以用多语言实现,Client与服务模块嵌套在一起,Nacos提供SDK和OpenAPI,如果没有SDK也可以根据OpenAPI手动写服务注册与发现和配置拉取的逻辑 。
除此nacos之外配置中心 | 简介 |
---|---|
Apollo | Apollo是由携程开源的分布式配置中心。特点有很多,比如:配置更新之后可以实时生效,支持灰度发布功能,并且能对所有的配置进行版本管理、操作审计等功能,提供开放平台API。并且资料也写的很详细。 |
springCloud Config | 这是Spring Cloud中带的配置中心组件。它和Spring是无缝集成,使用起来非常方便,并且它的配置存储支持Git。不过它没有可视化的操作界面,配置的生效也不是实时的,需要重启或去刷新。Nacos |
spring cloud | 这是SpingCloud alibaba技术栈中的一个组件,前面我们已经使用它做过服务注册中心。其实它也集成了服务配置的功能,我们可以直接使用它作为服务配置中心。 |
配置中心架构图:
1.2 Nacos 特性
-
Nacos 支持几乎所有主流类型的服务发现、配置和管理。
-
动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
-
动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。
-
配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。
-
Nacos 提供了一个简洁易用的UI帮助您管理所有的服务和应用的配置。
-
Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。
二、使用步骤(这里介绍的是nacos)
1.引入库
代码如下(示例):
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2.在项目中添加bootstrap.yaml 文件
代码如下(示例):
spring:
application:
name: share-6002
cloud:
nacos:
config:
server-addr: localhost:8848 # nacos的服务端地址
file-extension: yaml
profiles:
active: test
3.进入nacos配置
动态刷新
Nacos Config Starter 默认为所有获取数据成功的 Nacos 的配置项添加了监听功能,在监听到服务端配置发生变化时会实时触发 org.springframework.cloud.context.refresh.ContextRefresher 的 refresh 方法 。
如果需要对 Bean 进行动态刷新,给类添加 @RefreshScope 或@ConfigurationProperties注解。
总结
总结一下,在传统巨型单体应用纷纷转向分布式服务架构的历史进程中,配置中心是服务化不可缺少的一个系统组件,在这种背景下中心化的配置服务即配置中心应运而生,一个合格的配置中心需要满足如下特性:
- 配置项容易读取和修改
- 分布式环境下应用配置的可管理性,即提供远程管理配置的能力
- 支持对配置的修改的检视以把控风险
- 可以查看配置修改的历史记录
- 不同部署环境下应用配置的隔离性