你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

多租户和 Azure 应用程序配置

Azure 应用程序配置可用于存储应用程序的配置设置。 使用 Azure 应用程序配置可以轻松实现外部配置存储模式。 本文将介绍在使用多租户系统时非常有用的一些 Azure 应用程序配置功能,并提供有关如何在多租户解决方案中使用 Azure 应用程序配置的指导和示例的链接。

隔离模型

存储是指 Azure 应用程序配置服务的单个实例。

在多租户解决方案中,通常有两种类型的设置:

  • 共享设置是应用于多个租户的设置(例如全局设置),或应用于部署标记中的所有租户的设置。 通常,最好将全局设置存储在共享的应用程序配置存储中。 遵循此方法可以最大程度地减少当设置值更改时需要更新的位置数。 此方法还可最大程度地减轻设置不同步的风险。

  • 特定于租户的设置,例如每个租户的数据库名称或内部标识符。 或者,你可能希望为每个租户指定不同的日志级别,例如,在诊断特定租户报告的问题,并需要从该租户收集诊断日志时。 可以选择是要将多个租户的租户特定设置合并到一个存储,还是为每个租户部署一个存储。 应该根据要求做出这项决定。 如果解决方案为多个租户使用单个共享应用层,则使用租户特定的存储的优势可能微乎其微。 但是,如果你部署租户特定的应用程序实例,则可以选择通过部署租户特定的配置存储来依样遵循相同的方法。

下表汇总了 Azure 应用程序配置的主要租户隔离模型之间的差异:

注意事项 共享存储 按租户存储
数据隔离 低。 使用键前缀或标签标识每个租户的数据
性能隔离
部署复杂性 中-高
操作复杂性 中-高
资源成本 中-高
示例方案 具有共享应用程序层的大型多租户解决方案 具有完全隔离的部署的高级租户

共享存储

可为整个解决方案或为每个标记部署一个共享的 Azure 应用程序配置存储。 然后,可为所有租户的设置使用同一个存储,并可以使用键前缀标签来区分这些设置。

如果需要为每个租户存储大量的数据,或者需要对大量租户进行扩展,你可能会面临超过单个存储的任何资源限制的风险。 在此方案中,请考虑是否可以跨一组共享存储将租户分片,以最大程度地降低部署和管理成本。

如果采用此方法,请确保了解适用的资源配额和限制。 具体而言,请注意所用服务层级的总存储限制,并确保不会超过每小时的最大请求数。

为每个租户部署存储

替代的选择是为每个租户部署一个 Azure 应用程序配置存储。 使用 Azure 应用程序配置标准层可以在订阅中部署无限数量的存储。 但是,此方法通常更难以处理,因为必须部署并配置更多资源。 此外,部署的每个存储资源还会产生费用

如果你面临以下情况之一,请考虑部署租户特定的存储:

  • 需要使用客户管理的加密密钥,其中每个租户的密钥都是不同的。
  • 你的租户要求其配置数据与其他租户的数据完全隔离。 Azure 应用程序配置的访问权限在存储级别进行控制,因此你可以通过部署单独的存储来配置单独的访问权限。

支持多租户的 Azure 应用程序配置功能

在多租户应用程序中使用 Azure 应用程序配置时,可以使用多种功能来存储和检索租户特定的设置。

键前缀

在 Azure 应用程序配置中,你将使用表示应用程序设置的键值对。 键表示配置设置的名称。 可为键使用分层命名结构。 在多租户解决方案中,请考虑使用租户标识符作为键的前缀。

例如,假设你需要存储某个设置来指示应用程序的日志记录级别。 在单租户解决方案中,可将此设置命名为 LogLevel。 在多租户解决方案中,可以选择使用分层键名,例如将 tenant1/LogLevel 用于租户 1,将 tenant2/LogLevel 用于租户 2,依此类推。

Azure 应用程序配置允许指定长键名,以支持层次结构中的多个级别。 如果选择使用长键名,请确保了解键和值的大小限制

将单个租户的配置加载到应用程序时,可以指定键前缀筛选器以便仅加载该租户的键。 还可将 Azure 应用程序配置的提供程序库配置为先剪裁掉键中的键前缀,然后再将键提供给应用程序。 当你剪裁键前缀时,在该租户的值已加载到应用程序的情况下,应用程序会看到一致的键名。

标签

Azure 应用程序配置还支持标签,你可以使用标签来指定具有相同键的不同值。

标签通常用于版本控制、使用多个部署环境或用于解决方案中的其他目的。 虽然可将租户标识符用作标签,但无法将标签用于其他任何目的。 因此,对于多租户解决方案,通常最好使用密钥前缀来管理特定于租户的设置,并为其他目的使用标签。

如果你确实想要为每个租户使用标签,应用程序可以使用标签筛选器来仅加载特定租户的设置。 如果为每个租户采用不同的应用程序部署,则此方法可能很有帮助。

应用程序端缓存

使用 Azure 应用程序配置时,重要的一点是必须将设置缓存在应用程序中,而不是每次使用设置都要加载设置。 Azure 应用程序配置提供程序库可缓存并自动刷新设置。

你还需要决定应用程序是要加载单个租户还是所有租户的设置。

随着租户群的增长,一同加载所有租户的设置所需的时间和内存量可能也会增长。 因此,在大多数情况下,最好是在应用程序需要每个租户的设置时单独加载这些设置。

如果单独加载每个租户的配置设置,应用程序需要单独缓存每个租户的每组设置。 在 .NET 应用程序中,请考虑使用内存中缓存来缓存租户的 IConfiguration 对象,然后使用租户标识符作为缓存键。 通过使用内存中缓存,无需按每个请求重新加载配置,但如果应用程序面临内存压力,则缓存可以删除未使用的实例。 还可为每个租户的配置设置配置过期时间。

作者

本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。

主要作者:

其他参与者:

若要查看非公开领英个人资料,请登录领英。

后续步骤

查看多租户的部署和配置方法