spring cloud config 技术调研
- 简介
spring cloud是为微服务架构提供了一整套的技术方案,包括
服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等。
其中spring cloud config 是spring cloud 的子项目,为项目提供一个高可用的分布式配置中心。
- 项目功能
Config Server的架构图如下:
Spring Cloud Config 项目:
1.提供服务端和客户端支持。
2.集中式管理分布式环境下的应用配置。
3.基于Spring 环境,无缝与Spring应用集成。
4.可用于 任何 语言开发的程序。
5.默认实现基于git仓库,可以进行版本管理。
6.可替换 自定义实现。
Spring Cloud Config Server作为配置中心服务端:
1.拉取配置时更新git仓库副本,保证是最新结果。
2.支持数据结构丰富,yml,json,properties 等。
3.配合eureke可实现服务发现,配合cloud bus可实现配置推送更新。
4.配置存储基于git仓库,可进行版本管理。
5.简单可靠,有丰富的配套方案。
Spring Cloud Config Client 默认客户端实现:
- SpringBoot 项目不需要改动任何代码,加入一个启动配置文件指明使用 ConfigServer 上哪个配置文件即可。
- 技术分析
目前市面上已经有好几款配置中心项目,比较流行的有:百度的disconf、携程的apollo、淘宝的diamond等。这里对比下这几个项目的功能:
配置中心
|
管理后台
|
github star
|
存储
|
服务发现
|
推送更新
|
回滚
|
spring cloud config
|
没有(git管理界面)
|
675
|
git或svn
|
eureke
|
支持
|
支持
|
disconf(百度)
|
有
|
3226
|
mysql
|
zookeeper
|
支持
|
不支持
|
apollo(携程)
|
有
|
2914
|
mysql
|
eureke
|
支持
|
支持
|
配置中心
|
客户端
|
文档
|
开发框架
|
配置新增
|
依赖组件
|
spring cloud config
|
有
|
部署文档
使用文档
|
spring boot
|
|
|
disconf(百度)
|
有
|
部署文档
使用文档
|
spring mvc
|
后台新增
|
|
apollo(携程)
|
有
|
部署文档
使用文档
开发文档
|
spring boot
|
后台新增
|
|
eureke:spring cloud 的一个子项目,为服务提供服务注册中心。
spring cloud bus:spring cloud 的一个子项目,消息总线,将分布式的节点用轻量的消息代理连接起来。它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控。
3.1优点
- 满足配置中心要求(远程统一配置、高可用)。
- 具有回滚配置功能(git的特性)。
- spring cloud生态,与spring项目完美兼容。
- 继承spring boot的优势(简单、易部署、配置少)
- 属于spring cloud 生态,社区强大、版本迭代快
3.2缺点
- 没有后台管理,需要git管理后台支持来进行配置管理。
- 稳定性取决于git服务的稳定性。
- 新项目,使用人数一般(中小型应用)
- 因为没有管理后台,无法查看配置被哪些服务使用
- 部署集群必须是能访问git服务(同一内网或git服务提供外网地址)
- 不支持灰度发布
- 项目部署
4.1下载源码
当前下载项目使用tag:v1.4.0RELEASE
下载完成后导入到idea中:
4.2启动服务
进入spring-cloud-config-server 执行mvn spring-boot:run
默认端口是8888
就启动完毕了,
说明服务已经正常启动了。
ps:
如果出现错误:
Cannot determine embedded database driver class for database type NONE
需要在启动入口加上:
@EnableAutoConfiguration
(
exclude
={DataSourceAutoConfiguration.
class
})
再重新启动就可以了。
4.3测试配置中心
项目中提供了一个测试项目spring-cloud-config-sample
启动这个项目mvn spring-boot:run
默认端口是8080
测试是否能正常
获取
远程配置中心的配置:
返回:Spring Cloud Samples 数据正常。
查看info.description 这个配置:
4.5接口语法
先看一共有多少种访问方式:
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
application:客户端的spring.config.name
profile:表示获取指定环境下配置,例如开发环境、测试环境、生产环境 默认值default,实际开发中可以是 dev、test、demo、production等
lable: git标签,默认值master
- 总结
使用spring cloud config 需要对spring boot 有一定的了解,熟悉spring boot的开发模式和配置方式。项目是基于spring boot开发的,整个项目配置简单、部署方便。
充分利用了git的特性,如版本、分支和回滚等。使得配置中心可以支持多环境配置、配置后回滚等功能。
如果微服务是使用spring cloud开发,可以使用 spring cloud config 作为远程配置中心来管理整个集群服务的配置,达到统一配置、统一管理。