配置中心——让配置管理更简单

配置中心(ITConfig,简称itcfg),是由IT基础框架推出的统一配置管理产品。基于该配置中心产品,您可以在DevOps、微服务等场景下极大地减轻配置管理的工作量,增强配置管理的服务能力。

通过提供配置变更、配置推送、历史版本管理、灰度发布、配置变更审计等配置管理操作,配置中心帮助您集中管理所有生产环境中的配置,降低分布式系统中管理配置的成本,并降低因错误的配置变更带来可用性下降甚至发生故障的风险。

一、背景分析

在应用系统部署过程中,往往会有一些变量配置,这些配置都有一些共有的特性,那就是和业务侧的服务逻辑无关,只和当前的环境和特定场景有关。比如:

在开发、测试和生产的环境中,我们使用了不同的数据库;

在服务治理中,在开发环境使用直连模式,直连开关为true,在生产环境使用路由模式,直连开关为false;

不同的分组和实例中,使用的dubbo服务注册地址和dubbo端口也不同;

业务侧配置参数需要紧急修改参数并实时线上生效;

而对于以上场景,在开发中给我们带来了诸多痛点:

业务逻辑的重视程度大于变量配置,所以部分配置在代码中或配置文件中“写死”,系统发布后,若想变更配置,工序繁琐且需重新上线部署。

不同环境的war包使用不同配置,测试环境测试完成线上发布时,需重新打包更改配置,无法实现一次打包多次部署。

生产配置随war包部署,基于现有的jenkins自动化部署,部分生产配置在git上存储,安全不可控。

部署环境多样性导致项目中配置文件存在大量冗余,管理成本上升。

为了解决以上问题,实现一次打包多地部署需求,减少项目管理及安全风险,我们需要将可变变量外移并通过页面统一可视化管理,基于此,我们统一建设了配置中心。

二、配置中心实现原理

图例说明:

配置中心:提供对配置项和配置归属管理的能力。包括系统管理、应用管理、分组管理、实例管理、配置管理、配置监控

数据库:提供对配置备份持久化的能力。实现对配置数据的存储和读取。

ZooKeeper集群:提供配置分布式管理的能力。实现对配置的存储、推送和分布式容灾。

客户端:提供监听获取配置项、生成本地配置文件、推送配置项到环境变量的能力。实现容灾、监听变化、实时刷新的机制。

应用程序:通过获取环境变量的配置项,匹配key值,得到对应value值

用户通过配置中心web端进行注册,然后web将配置信息推送到ZooKeeper集群对应目录,业务系统的各个实例节点集成配置中心客户端,从ZooKeeper上监听获取到配置,并推送到各个实例的环境变量中,项目实例通过集成客户端实现对应用配置的获取。

三、配置中心能做什么

配置中心基于ZooKeeper实现,整个配置中心最终实现是为每个实例都分配指定的配置。因此配置中心可以完成三个动作:定义环境、分配实例、配置变更。环境+实例+配置->配置管理,也就是说,配置中心能够完成从开发、测试、生产运行后的配置统一管理。

配置中心可以解决以下关键问题:

离散的配置集中化

解耦配置文件

支持按实例划分的个性化配置

支持不同的组件版本推送不同的配置

业务配置动态变更

对于软件交付产生的好处:

配置独立管理

为自动化部署创造条件

避免开发人员获取敏感配置值

同时,配置中心在技术保证和使用层面,提供了以下能力:

支持zookeeper分布式管理+数据库持久化备份

无须改动代码,即可在多个环境中发布上线

统一管理不同分组环境的配置

配置修改实时获取

提供有效的容灾方案,如果断开和zk的连接,会自动从本地配置文件中获取配置。

对配置管理有很好的控制,支持批处理上传配置和单配置增加

支持配置监控,可以查看哪些实例应用了配置

四、配置中心不能做什么

配置中心对配置当然也不是万能的,以下两点当前就无法完成:

组件配置实时生效(热加载)

环境统一化,研发、测试、生产使用一套配置中心

那么组件配置为什么不能像业务配置一样热加载呢?

组件配置和业务配置技术加载方式不同。组件配置获取配置后,必须要完成Spring初始化连接才能应用,而业务配置则不需要,只要有调用,就能实时获取最新的配置。

组件连接第三方中间件,使用的IP地址等配置在连接时存在延迟风险,因此,即使从技术角度能够解决Spring初始化问题,也不能保证一定能够做到无缝变更组件配置。

那么环境统一化问题也是目前无法解决的问题,因为三个环境本身就处在不同的网络中,生产数据为了保证安全,是不能和研发数据混为一谈的,这也就是为什么要部署多套配置中心的原因。

那么上述两个问题什么时候可以做呢?

分布式微服务和容器化成熟。微服务和容器化的成熟可以使得底层资源得到共享,配置可以快速推送到环境变量中,客户端利用Spring重载能力重新建立连接。

统一运营门户,完成DevOps的整体流程。DevOps整理流程的完善有助于解决三个环境融合的问题,届时运维可以通过接口调用和整合,完成从开发到运维一整套的流程管理。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180503G1QSYW00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券