统一配置中心选型对比
整理笔记时发现之前整理的一些东西,分享给大家。
为什么需要集中配置
程序的发展,需要引入集中配置:
- 随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关、参数的配置、服务器的地址……
- 并且对配置的期望也越来越高,配置修改后实时生效,灰度发布,分环境、分集群管理配置,完善的权限、审核机制……
- 并且随着采用分布式的开发模式,项目之间的相互引用随着服务的不断增多,相互之间的调用复杂度成指数升高,每次投产或者上线新的项目时苦不堪言,因此需要引用配置中心治理。
已有zookeeper、etcd还需要引入吗?
- 之前的音乐服务项目,通过etcd实现了服务的注册与发现,且一些业务配置也存储到etcd中,通过实践我们收获了集中配置带来的优势
- 但是etcd并没有方便的UI管理工具,且缺乏权限、审核等机制
- 最重要的是,etcd和zookeeper通常定义为服务注册中心,统一配置中心的事情交给专业的工具去解决。
有哪些开源配置中心
spring-cloud/spring-cloud-config
https://github.com/spring-cloud/spring-cloud-config
spring出品,可以和spring cloud无缝配合淘宝 diamond
https://github.com/takeseem/diamond
已经不维护disconf
https://github.com/knightliao/disconf
java开发,蚂蚁金服技术专家发起,业界使用广泛ctrip apollo
https://github.com/ctripcorp/apollo/
Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,具备规范的权限、流程治理等特性。
配置中心对别
功能特性
我们先从功能层面来对别
功能点 | 优先级 | spring-cloud-config | ctrip apollo | disconf | 备注 |
---|---|---|---|---|---|
静态配置管理 | 高 | 基于file | 支持 | 支持 | |
动态配置管理 | 高 | 支持 | 支持 | 支持 | |
统一管理 | 高 | 无,需要github | 支持 | 支持 | |
多环境 | 中 | 无,需要github | 支持 | 支持 | |
本地配置缓存 | 高 | 无 | 支持 | 支持 | |
配置锁 | 中 | 支持 | 不支持 | 不支持 | 不允许动态及远程更新 |
配置校验 | 中 | 无 | 无 | 无 | 如:ip地址校验,配置 |
配置生效时间 | 重启生效,或手动refresh生效 | 实时 | 实时 | 需要结合热加载管理, springcloudconfig需要 git webhook+rabbitmq 实时生效 | |
配置更新推送 | 高 | 需要手工触发 | 支持 | 支持 | |
配置定时拉取 | 高 | 无 | 支持 | 配置更新目前依赖事件驱动, client重启或者server端推送操作 | |
用户权限管理 | 中 | 无,需要github | 支持 | 支持 | 现阶段可以人工处理 |
授权、审核、审计 | 中 | 无,需要github | 支持 | 无 | 现阶段可以人工处理 |
配置版本管理 | 高 | Git做版本管理 | 界面上直接提供发布历史和回滚按钮 | 操作记录有落数据库,但无查询接口 | |
配置合规检测 | 高 | 不支持 | 支持(但还需完善) | ||
实例配置监控 | 高 | 需要结合springadmin | 支持 | 支持,可以查看每个配置在哪些机器上加载 | |
灰度发布 | 中 | 不支持 | 支持 | 不支持部分更新 | 现阶段可以人工处理 |
告警通知 | 中 | 不支持 | 支持,邮件方式告警 | 支持,邮件方式告警 | |
依赖关系 | 高 | 不支持 | 不支持 | 不支持 | 配置与系统版本的依赖系统运行时的依赖关系 |
技术路线兼容性
引入配置中心,需要考虑和现有项目的兼容性,以及是否引入额外的第三方组件。我们的java项目以SpringBoot为主,需要重点关注springboot支持性。
功能点 | 优先级 | spring-cloud-config | ctrip apollo | disconf | 备注 |
---|---|---|---|---|---|
SpringBoot支持 | 高 | 原生支持 | 支持 | 与spring boot无相关 | |
SpringCloud支持 | 高 | 原生支持 | 支持 | 与spring cloud无相关 | |
客户端支持 | 低 | Java | Java、.Net | java | |
业务系统侵入性 | 高 | 侵入性弱 | 侵入性弱 | 侵入性弱,支持注解及xml方式 | |
依赖组件 | 高 | Eureka | Eureka | zookeeper |
可用性与易用性
引入配置中心后,所有的应用都需要依赖配置中心,因此可用性需要重点关注,另外管理的易用性也需要关注。
功能点 | 优先级 | spring-cloud-config | ctrip apollo | disconf | 备注 |
---|---|---|---|---|---|
单点故障(SPOF) | 高 | 支持HA部署 | 支持HA部署 | 支持HA部署,高可用由zookeeper保证 | |
多数据中心部署 | 高 | 支持 | 支持 | 支持 | |
配置获取性能 | 高 | unkown | unkown(官方说比spring快) | ||
配置界面 | 中 | 无,需要通过git操作 | 统一界面(ng编写) | 统一界面 |
最终选择
综上,ctrip applo是较好的选择方案,最终选择applo。
- 支持不同环境(开发、测试、生产)、不同集群
- 完善的管理系统,权限管理、发布审核、操作审计
- SpringBoot集成友好 ,较小的迁移成本
- 配置修改实时生效(热发布)
- 版本发布管理
部署情况
- 管理Web:http://config.***.com/
- 三个环境MetaServer:
- Dev: config.devmeta.***.com
- Test: config.testmeta.***.com
- PRO: config.prometa.***.com
分类: 架构与选型
标签: 配置中心
转载:
https://www.cnblogs.com/xiaoqi/p/configserver-compair.html
统一配置中心选型对比相关推荐
- springcloud-spring cloud config统一配置中心
统一配置中心 为什么需要统一配置中心? 统一配置中心顾名思义,就是将配置统一管理,配置统一管理的好处是在日后大规模集群部署服务应用时相同的服务配置一致,日后再修改配置只需要统一修改全部同步,不需要一个 ...
- spring cloud互联网分布式微服务云平台规划分析--服务统一配置中心
1.介绍 鸿鹄云架构[服务统一配置中心]为分布式系统中的外部配置提供服务器和客户端支持.使用commonservice-config,可以在所有环境中管理应用程序的外部属性.应用程序可通过从开发人员到 ...
- 统一配置中心的设计方案
转载自 统一配置中心的设计方案 对于配置文件,我们不陌生,它提供我们可以动态修改程序运行能力.引用别人的一句话就是:系统运行时(runtime)飞行姿态的动态调整. 我可以把我们的工作称之为在快速飞行 ...
- SpringCloud 从菜鸟到大牛之五 统一配置中心 Spring Cloud Config
延续上一篇文章 应用通信–Feign Ribbon https://blog.csdn.net/dgutliangxuan/article/details/80967936 来看一看,架构图 为什么要 ...
- SpringCloud实战五:统一配置中心
Hello大家好,我是初晨,本章我们学习SpringCloud 的统一配置中心的使用.大家有问题和意见可以发邮箱mr_beany@163.com 一:为什么需要统一配置中心 简单来说就是将项目中的配置 ...
- 第十二章 Spring Cloud Config 统一配置中心详解
目录 一.配置问题分析及解决方案 1.问题分析 2.解决方案 二.Spring Cloud Config 介绍 1.Spring Cloud Config特性 2.Spring Cloud Confi ...
- 统一配置中心对比介绍
一.Apollo和Spring Cloud Config配置中心对比 二.apollo相比于spring-cloud-config有什么优势 https://github.com/ctripcorp/ ...
- Spring-Cloud中的统一配置中心
服务拆分以后,服务的数量非常多,如果所有的配置都以配置文件的方式放在应用本地的话,非常难以管理,可以想象当有几百上千个进程中有一个配置出现了问题,是很难将它找出来的,因而需要有统一的配置中心,来管理所 ...
- 『Consul』.NET Core快速接入Consul实现统一配置中心
最新文章
- SURF与SIFT比较分析
- System.Web.Caching.Cache类 缓存 各种缓存依赖
- 用逻辑回归模型解决互联网金融信用风险问题
- unity工程包怎么上传git_如何将Git用于Unity3D源代码管理?
- mysql5.1.7升级到5.6_1 MySQL5.6 升级到 5.7 版本
- 服务器常用陈列raid0,raid1,raid5,raid10(0+1)详解及区别
- [转载] python自带sqlite库_Python内置库SQlite3使用指南
- 信号与线性系统分析 吴大正 (与电子 通信专业的同学共勉)
- 50道逻辑编程小题目
- 生信分析电脑推荐_生信工程师的个人计算机配置推荐
- python mpi_MPI Python环境搭建
- 世界上有10种人,一种是懂二进制的人,一种是不懂二进制的人。
- IText_根据模板导出PDF(文字、表格、图片)
- 《响应式Web设计实践》一2.1 布局选项
- unity 相同材质不同属性怎么合批
- 智慧矿山无人驾驶模块
- OPC UA协议网关
- c语言程序三角形实验报告,C语言程序设计实验报告(6)
- MySQL 实现不同分组取不同值
- 下载并安装Windows 7 系统的步骤