你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 上的许多多租户解决方案使用开源关系数据库管理系统 Azure Database for PostgreSQL。 本文介绍了在使用多租户系统时非常有用的 Azure Database for PostgreSQL 功能。 本文还提供有关如何在多租户解决方案中使用 Azure Database for PostgreSQL 的指导和示例的链接。
部署模式
Azure Database for PostgreSQL 有三种部署模式适用于多租户应用程序:
- Azure Database for PostgreSQL - Flexible Server - 对于大多数不需要 Azure Cosmos DB for PostgreSQL 所提供的高可伸缩性的多租户部署来说,此部署是一种不错的选择。
- 具有弹性群集的 Azure Database for PostgreSQL 灵活服务器(预览版) - 在托管服务中提供水平扩展,适用于需要为未来扩展能力做好准备的多租户应用程序,可从少数租户扩展到大量租户。 此功能以预览版提供,不建议将其用于生产。 但是,可以开始评估它以供将来实现。
- Azure Cosmos DB for PostgreSQL - Azure 托管数据库服务,专为需要高级别缩放的解决方案而设计,通常包括多租户应用程序。 此服务是 Azure Cosmos DB 产品系列的一部分。
注意
Azure Database for PostgreSQL - 单一服务器即将停用,计划于 2025 年 3 月 28 日之前停用。 不建议将它用于新的多租户工作负载。
支持多租户的 Azure Database for PostgreSQL 的功能
使用 Azure Database for PostgresSQL 生成多租户应用程序时,可以使用多种功能来增强解决方案。
注意
某些功能仅在特定的部署模式中可用。 以下指南中指出了这些功能。
行级安全性
使用共享表时,行级别安全性可用于强制实施租户级隔离。 在 PostgreSQL 中,通过将行安全策略应用于表来按租户限制对行的访问,从而实现行级别安全性。
在表上实现行级安全性时,可能会对性能造成轻微影响。 因此,可能需要对启用了行级别安全性的表创建其他索引,以确保性能不受影响。 使用行级别安全性时,请务必使用性能测试技术来验证工作负荷是否符合基线性能要求。
详细信息:
使用分片进行水平缩放
使用分片模式可以跨多个数据库或数据库服务器缩放工作负载。
需要高级别的解决方案可以使用 Azure Cosmos DB for PostgreSQL。 此部署模式支持跨多个服务器(节点)对租户进行水平分片。 通过在多租户数据库中使用分布式表,可以确保租户的所有数据都存储在同一节点上,从而提高查询性能。
注意
自 2022 年 10 月起,Azure Database for PostgreSQL 超大规模 (Citus) 已更名为 Azure Cosmos DB for PostgreSQL,并移入 Cosmos DB 产品系列中。
详细信息:
- 使用 Azure Cosmos DB for PostgreSQL 设计多租户数据库
- 分布式表
- 在分布式表中选择分布列。
- 关于使用适用于多租户应用程序的 Citus 的指南。
弹性群集(预览版)
弹性群集是 Azure Database for PostgreSQL 灵活服务器的一项功能,可在单个托管服务中提供水平缩放功能。 此部署选项利用分布式表功能,为需要横向扩展能力的多租户工作负载提供支持。
在多租户解决方案中,弹性群集支持跨多个节点分片租户数据。 可以按租户 ID 分配表,以确保特定节点上的租户数据并置,从而提高特定于租户的查询的查询性能。
注意
弹性群集目前以预览版提供,仅适用于 Azure Database for PostgreSQL 灵活服务器。
详细信息:
连接池
Postgres 使用基于进程的模型进行连接。 这种模型使得维护大量空闲连接的效率低下。 某些多租户体系结构需要大量的活动连接,这会对 Postgres 服务器的性能产生负面影响。
默认情况下,通过 PgBouncer 的连接池安装在 Azure Database for PostgreSQL 灵活服务器中。
详细信息:
- PgBouncer - Azure Database for PostgreSQL - 灵活服务器
- Azure Cosmos DB for PostgreSQL 中的连接池
- 为 Azure Database for PostgreSQL 安装和设置 PgBouncer 连接池代理的步骤
Microsoft Entra 身份验证
Azure Database for PostgreSQL 灵活服务器支持使用 Microsoft Entra ID 对连接进行身份验证。 此功能使多租户环境中的应用程序工作负载能够通过使用租户特定的服务主体或托管标识对数据库进行身份验证,这意味着数据库访问权限可以限定为单个租户。 通过将Microsoft Entra ID 身份验证与特定于租户的行安全策略相结合,可以降低应用程序从多租户数据库中访问另一租户数据的风险。 详细信息:
- 使用 Microsoft Entra 向 Azure Database for PostgreSQL 灵活服务器进行身份验证
- 使用托管标识连接到 Azure Database for PostgreSQL 灵活服务器
Azure 机密计算(预览版)
Azure Database for PostgreSQL 灵活服务器 通过受信任的执行环境(TEE)提供对 Azure 机密计算的支持,该环境为正在使用的数据提供基于硬件的保护。 此功能可保护租户数据免受作系统、虚拟机监控程序或其他应用程序的未经授权的访问。
对于处理敏感数据的多租户解决方案,机密计算在处理过程中提供硬件级数据保护。 如果租户具有严格的数据保护要求或法规合规性需求,或者需要确保应用程序提供程序无法访问租户数据,则适用。
注意
机密计算目前为预览版,需要特定的虚拟机 SKU。
详细信息:
加密
Azure Database for PostgreSQL 灵活服务器 中存储的数据默认使用Microsoft管理的密钥进行静态加密,但也可以使用客户管理的密钥来允许租户指定其自己的加密密钥。
使用 客户管理的密钥(CMK)时,可以提供存储在 Azure Key Vault 中的自己的加密密钥。 在多租户环境中,这使你能够对不同的租户使用不同的加密密钥,即使其数据存储在同一数据库服务器中也是如此。 此功能还允许租户控制自己的加密密钥,如果需要停用其帐户,删除加密密钥可确保其数据不再可访问。
Azure Database for PostgreSQL 灵活服务器支持客户管理密钥的自动版本更新。 此功能在 Azure Key Vault 中轮换后自动更新到新的密钥版本,而无需手动密钥版本管理。 在法规符合性需要定期密钥轮换的多租户环境中,此自动化可减少手动操作任务并维护数据保护,而不会造成服务中断。
详细信息:
参与者
本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。
主要作者:
- 丹尼尔·斯科特-伦斯福德 |合作伙伴解决方案架构师、数据与 AI
其他参与者:
- John Downs |Azure 模式和做法的主要软件工程师
- Arsen Vladimirskiy | FastTrack for Azure 首席客户工程师
- Paul Burpo | ISV 的 FastTrack for Azure 首席客户工程师
- Assaf Fraenkel | ISV 和初创企业的 Azure FastTrack 高级工程师/数据架构师
若要查看非公开 LinkedIn 个人资料,请登录 LinkedIn。
后续步骤
查看多租户的存储和数据方法。