企业复杂系统的应用配置管理

88次阅读
没有评论

问题描述

在运行一个分布式复杂的企业系统时,面临着应用配置管理的挑战。该企业系统包括多个由不同敏捷团队交付的软件,涵盖Java、.NET、C++和SQL(MSSQL+Oracle)等不同技术栈,但协调性不足,每次都需要为项目特定的功能需求创建一致的系统配置,这成为一个痛点项目。

用户希望引入一种配置元模型,从业务层面(涉及客户、产品经理等)一直到个体参数(涉及开发人员和系统工程师)。他设想了一种类似于汽车配置器的工具,最终生成一致的配置。这个工具需要明确维护功能(数百个)和参数(数万个)之间的所有复杂关系。

用户在问题描述中提到,是否有现成的工具或框架可以支持这样的需求,同时他也在考虑,适应大型企业系统的特定需求可能比自己构建更复杂。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

使用Consul进行配置管理

我强烈推荐使用Consul进行配置管理,它是一个高可靠性、分布式的系统,提供了许多易于使用的功能和简单的Rest API。而且,它的社区版是免费的,对于大型企业也有企业版提供。

我特别喜欢Key-Value存储,因为它允许我在所有三个环境(开发、测试、生产)中分别为微服务和后端服务(分别使用C#/.Net Core和Java编写)设置不同的配置。

每当我添加新的服务或应用程序时,都会将各个环境的配置添加到Key-Value存储中,然后一个简单的配置客户端会在应用程序的引导/加载过程中下载配置。

你可以在这里阅读更多详细信息,简要概括如下:

  • 服务发现:Consul的客户端可以提供服务(例如api或mysql),其他客户端可以使用Consul来发现提供给定服务的提供者。应用程序可以轻松找到它们所依赖的服务。
  • 健康检查:Consul的客户端可以提供任意数量的健康检查,可以与给定的服务关联(例如,web服务器是否返回200 OK),也可以与本地节点关联(例如,内存利用率是否低于90%)。这些信息可以用于运营人员监控集群健康,并且由服务发现组件用于将流量从不健康的主机路由出去。
  • KV存储:应用程序可以利用Consul的分层键值存储来进行各种用途,包括动态配置、特性开关、协调、领导者选举等。简单的HTTP API使其易于使用。
  • 多数据中心:Consul直接支持多数据中心。这意味着Consul的用户无需担心构建额外的抽象层来扩展到多个地区。

考虑使用Puppet、Salt Stack或Chef

你还可以考虑使用Puppet、Salt Stack或Chef等工具,它们都可以在Linux或Windows上安装。然后,可以让各个开发团队负责管理他们应用的模块,就像他们应该管理他们的安装程序一样。

配置管理系统的配置代码可以像你现有的代码一样在git或其他版本控制系统中进行管理。升级则变得简单,只需将最新的模块版本或特定的提交ID或标签检出到模块目录中。

对于某些事情(例如,时间源),你可以使用适用于所有主机的NTP模块,而不仅仅是特定主机。这将允许你的项目经理、客户、运维团队等在组织级/域级管理一些事物,而一些开发人员或团队则在个体级/域级管理其他事物。这甚至适用于你的网络团队,他们可以使用这些配置管理系统来使用SDN(软件定义网络)技术管理防火墙和交换机。

综上所述,Consul是一个强大的配置管理工具,可以满足复杂企业系统的需求。而Puppet、Salt Stack、Chef等也是不错的选择,可以根据团队和项目的需要进行选择。

以上是解决方案的一些建议,具体的选择要根据你的系统特点、团队技术栈、配置复杂度等因素来决定。希望这些信息对你有所帮助!

正文完