DevOps之配置管理

简介: 配置与代码分离

什么是配置管理

在《持续交付—发布可靠软件的系统方法》一书是这样对配置管理进行定义的:

“配置管理是指一个过程,通过该过程,所有与项目相关的产物,以及它们之间的关系都被唯一定义、修改、存储和检索。”


一个应用程序是由软件代码、运行数据以及配置信息共同组成。在 《12 因素应用》(The Twelve-Factor App)中提到,应用程序的配置在不同部署环境(开发环境、测试环境、生产环境等)之间会有很大的差异。比如:数据库连接地址、缓存连接地址、第三方证书等。因此,需要将代码和配置分离,通过配置文件屏蔽各个部署环境的差异。


12 因素应用中也推荐将应用的配置存储于环境变量中。环境变量可以非常方便地在不同的部署间做修改,却不用动一行代码。因此,这里的配置主要是指应用程序的配置,配置管理主要是指如何存储不同环境的应用程序配置,以保证各个环境使用的都是同一份代码。


配置信息的描述和存储

配置信息的描述

通常情况下,配置项以键值对的形式来表示,比如 spring.application.name=serviceA,这代表一个配置项。应用程序使用配置文件来存储多个配置项,通过层级来组织配置项,特别是当以 yaml 格式展现时,层级会更加清晰,这也是目前采用最多的展现形式。除此之外还有 properties、xml 等形式。


配置信息的存储

配置信息比较常见的存储形式有数据库、版本控制库、文件目录、环境变量等。下面介绍一下每种形式的优缺点。

  • 数据库:优点是可以充分利用数据库的检索功能,能够按不同的条件查询配置项,可以维护多个环境的配置。缺点是需要对配置项进行建模,开发单独的配置管理系统用于管理数据库中的配置项。另外,配置项的版本、版本的回退都需要单独维护。


  • 版本控制库:优点是可以充分利用版本控制库本身的特性,对配置项的变更进行版本控制和变更追溯,非常容易地获取任意时刻的版本以及版本的回退,并且不需要开发额外的系统。此外,它也能管理多个环境的配置。缺点是不支持单个配置项的查询功能,每次更新都需要全量更新。


  • 文件目录:优点是直接从本地获取,不依赖于其他系统。缺点是不能有效地进行版本控制,每个环境都是单独的文件目录,不能有效管理和控制多环境下的配置信息。


  • 环境变量:优点是方便设置与读取,能够更好地与脚本集成,与每个环境绑定。缺点是不能有效地进行版本控制。


配置管理的时机

在应用程序生命周期中,不少阶段可以对应用程序进行配置,比如构建、部署、启动、运行和发布阶段。下面介绍下这几个阶段的是如何进行配置的。

  • 构建阶段:在构建时,可以将配置文件直接添加到生成的二进制文件中。这种方式由于二进制文件与配置文件捆绑在一起,每个环境都需要生成一个单独的二进制文件,违反了12 因素应用中的原则,所以不推荐使用该方法。


  • 部署阶段:在安装应用程序时,部署脚本或安装程序获取必需的配置信息。这种方式可以保证在二进制文件是同一个,遵循了 12 因素应用中将代码和配置分离的原则。


  • 启动阶段:在应用程序启动时,将配置文件加载进来。该方式需要保证影响应用程序启动的配置信息能够获取,否则程序无法启动。


  • 运行时阶段:在应用程序运行时,动态的变更配置文件。该方式主要用于在不需要停止服务的情况下变更配置信息。


  • 发布阶段:是指在应用程序真正发布上线的时候,将配置文件改为生产环境的版本。该方式只是用于生产环境发布,由于此时发布的软件和之前测试的是同一个,因此测试通过是具备发布上线条件的。


配置管理的实现方式

配置管理目前常见的实现方式:

  • 有 Spring Boot 的 Profile 形式;
  • 基于 Git 的配置管理;
  • 配置管理系统如携程的 Apollo;
  • 配置管理数据库 CMDB。


目录
相关文章
|
安全 Devops Ruby
2019 DevOps 必备面试题——配置管理篇
原文地址:https://medium.com/edureka/devops-interview-questions-e91a4e6ecbf3 原文作者:Saurabh Kulshrestha 翻译君:CODING 戴维奥普斯 现在让我们来看看您对配置管理的了解程度。
|
4月前
|
弹性计算 测试技术 持续交付
阿里云云效产品使用合集之如何进行自动化测试
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
4月前
|
敏捷开发 Java 测试技术
阿里云云效产品使用合集之后置清理操作的触发判断条件是什么
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
4月前
|
敏捷开发 缓存 前端开发
阿里云云效产品使用合集之前端打包时npm安装卡住一般是什么导致的
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
4月前
|
敏捷开发 弹性计算 持续交付
阿里云云效产品使用合集之同一个主机部署是否支持下载多个制品
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
4月前
|
敏捷开发 监控 Java
阿里云云效产品使用合集之Codeup WebIDE环境下,如何使用通义灵码
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
4月前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之如何进行大文件的迁移
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
4月前
|
敏捷开发 安全 测试技术
阿里云云效产品使用合集之如何在甘特图视图中看到负责人信息
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。