你当前正在访问 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 维护, 它最初是由以下贡献者撰写的。
主要作者:
- John Downs | 首席软件工程师
其他参与者:
- 阿森·弗拉基米尔斯基|首席工程师,FastTrack for Azure
- Zhenlan Wang | Azure 应用程序配置首席软件工程经理
若要查看非公开领英个人资料,请登录领英。
后续步骤
查看多租户的部署和配置方法。