如何在多个部署环境中管理微服务架构中的配置文件?

问题描述 投票:0回答:4

我正在寻找一种使用微服务架构(.NET Core)管理大型系统中多个模块的配置文件的方法。

目前我们有 5 个模块并且还在增加。每个模块包含 2 个项目(比如 UI 和 API)。每个项目对 Dev、Staging、Production 三个环境都有不同的配置。

5 个模块 x 2 个项目 x 3 个环境 = 30 个配置文件。

许多项目需要为所有开发环境逐字重复相同的配置值(例如,共享包需要配置)。

很多时候每个项目和环境都需要相同的配置,但有时它会有所不同,有时它完全是特定于项目的。

这只会变得更糟。将添加更多模块,配置文件将变得更大。我正在考虑的一个解决方案是编写一个脚本,该脚本根据具有所有项目和环境的所有值的主配置文件在所有配置文件中查找和替换。

但即使这看起来也令人望而生畏,因为我还不确定如何布局主配置文件或明确哪些配置键属于哪些项目。

这变得很难管理,我想知道是否有人有好的管理流程?

asp.net-core configuration-files
4个回答
3
投票

通用配置是微服务架构中的诅咒。 整点 是它们应该是离散的、独立的功能单元。如果一个或多个在做同样的事情,那么你没有正确地细分你的域。

唯一的例外是检测:日志记录、分析、跟踪等。如果这就是您在这里谈论的内容,那么您可以通过多种方式来处理它。

  1. 您可以为您的仪器拥有一个单独的配置源,它甚至不需要在项目本地。比如你可以创建一个像

    instrumentation.json
    这样的文件,放到一个常用的共享位置,然后在
    Program.cs
    :

    CreateDefaultWebBuilder()
        ConfigureAppConfiguration(builderContext, config) =>
        {
            config.AddJsonFile(@"\\path\to\instrumentation.json", optional: false, reloadOnChange: true)
         })
         .Run();
    

    您甚至可以为检测提供特定于环境的 JSON:

    IHostingEnvironment env = builderContext.HostingEnvironment;
    config.AddJsonFile($@"\\path\to\instrumentation.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
    
  2. Docker 有自己的配置/秘密设置,您可以使用它来设置环境变量,或者基本上可以将其提供给应用程序。请参阅:https://docs.docker.com/engine/swarm/secrets/

  3. 您可以使用像 Azure Key Vault 这样的分布式配置源。如果您不想专门使用它,SQL Server 或 Redis 之类的东西也可以,但您必须为它们创建自定义配置提供程序或获取现有的第三方库。


3
投票

试用https://microconfig.io

它专为管理具有多个环境的微服务配置而设计。


0
投票

使用Azure Key Vault怎么样?

Key Vault 充当您的主配置文件。

然后您将为每个环境(开发、登台、生产)创建一个 Key Vault。


0
投票

试试mergeconfigs,支持合并多个配置文件,方便本地开发

© www.soinside.com 2019 - 2024. All rights reserved.