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

发表于:2019-1-23 11:45

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:快报    来源:客技院

  配置中心(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整理流程的完善有助于解决三个环境融合的问题,届时运维可以通过接口调用和整合,完成从开发到运维一整套的流程管理。

    上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号