Spring Cloud 如何选择分布式配置中心

96
尹吉欢
2017.11.30 10:34* 字数 856

微服务必备的几样武器有了,才能独闯武林, 有哪几样呢?

  • 注册中心(eureka, consul, zk, etcd)
  • 配置中心 (Spring Cloud Config, disconf )
  • API网关 (Spring Cloud zuul, kong)
  • 熔断器 (hystrix)
  • 链路追踪 (sleuth)
  • 统一日志管理 (ELK)
  • 自动化部署 (jenkins + Docker)

今天我们主要讲下同样是非常重要的一项,配置中心,当然官方提供的解决方案就是Spring Cloud Config

它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git,SVN等仓库中

在Spring Cloud Config组件中,分两个角色,一是config server,二是config clien

在做技术调研的时候我也研究了下Spring Cloud Config,主要有以下特性

  • 配置集中管理
  • 依赖于git支持版本回退
  • 可以通过git 仓库的WebHook和消息队列来实现自动更新
  • 配置加密解密
  • 可以通过调用接口手动更新配置

还有就是国内的disconf, disconf 可以为各种业务平台提供统一的配置管理服务。

  • 支持配置(配置项+配置文件)的分布式化管理
  • 配置发布统一化
  • 极简的使用方式(注解式编程 或 XML代码无代码侵入模式)
  • 低侵入性或无侵入性、强兼容性
  • 需要Spring编程环境

虽然有很多选择,如果说是Spring Cloud来构建微服务,那么Spring Cloud Config肯定是比较好的一个选择,集成非常方便

但是呢,自动更新那块我感觉不是很好,要依赖WebHook来做,统一更新的话还得将config server前面加一负载均衡,然后对server进行刷配置的通知

还有就是关于配置修改之后的回调事件,目前没找到合适的方法

disconf 也是一个很好的作品,但是呢,也是个人开源的,也不维护了,也许功能够用了

基于以上的一些调查,我还是觉得自己写一个,可以提升一下自己,再而有问题,加新特性,也比较方便

我取了一个很随便的名称Smconf, 意思就是很简单的配置管理

github: https://github.com/yinjihuan/smconf

目前的功能点如下:

  • 提供配置的统一管理
  • 多个环境(生产环境:prod, 线上测试环境:online, 线下测试环境:test, 开发环境:dev)
  • web后台配置管理
  • 配置修改后实时同步到使用的客户端
  • 无缝集成spring和spring boot项目
  • 非spring项目中也可以使用
  • web后台支持不同账号管理不同环境的配置
  • 支持水平扩容,负载,部署多个server,client自动发现
  • 支持用户自定义配置修改回调接口做扩展

有了这个配置中心我们就可以做很多事情了

比如在API网关中我们可以做到

  • 动态限流
  • 动态对IP进行限制
  • 动态对服务进行降级
  • 灰度发布

配置修改实时生效,不在需要一台台去重启服务了

欢迎加入我的知识星球,一起交流技术,免费学习猿天地的课程(http://cxytiandi.com/course

微信扫码加入猿天地知识星球
猿天地
日记本