你当前正在访问 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 灵活服务器是一个不错的选择,不需要 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 PostgreSQL 生成多租户应用程序时,以下功能可以增强解决方案。
注意
某些功能仅在特定的部署模式中可用。 以下指南介绍了哪些功能可用。
行级安全性
使用共享表时,行级别安全性可用于强制实施租户级隔离。 在 PostgreSQL 中,通过将 行安全策略 应用于表来实现行级别安全性,以限制租户对行的访问。
对表实现行级别安全性可能会影响性能。 可能需要对启用了行级别安全性的表创建其他索引,以确保性能不受影响。 使用行级别安全性时,请务必使用性能测试技术来验证工作负荷是否符合基线性能要求。
有关详细信息,请参阅 保护 Azure Database for PostgreSQL 服务器。
使用分片进行水平缩放
使用分片模式可以跨多个数据库或数据库服务器缩放工作负载。
需要高级别的解决方案可以使用 Azure Cosmos DB for PostgreSQL。 此部署模式允许跨多个服务器或节点水平分片租户。 使用多租户数据库中 的分布式表 来确保租户的所有数据都存储在同一节点上。 此方法可提高查询性能。
注意
2022 年 10 月,Azure Database for PostgreSQL 超大规模(Citus)被改名为 Azure Cosmos DB for PostgreSQL,并 已迁移到 Azure Cosmos DB 系列产品。
如需了解更多信息,请参阅以下文章:
弹性群集(预览版)
弹性群集是 Azure Database for PostgreSQL 灵活服务器的一项功能。 它们提供单个托管服务中的水平缩放功能。 此部署选项利用分布式表功能,为需要横向扩展能力的多租户工作负载提供支持。
在多租户解决方案中,弹性群集可跨多个节点启用租户数据分片。 可以按租户 ID 分配表,以确保租户数据在特定节点上共置。 此方法可以提高特定于租户的查询的查询性能。
注意
弹性群集以预览版提供,仅适用于 Azure Database for PostgreSQL 灵活服务器。
有关详细信息,请参阅 Azure Database for PostgreSQL 灵活服务器中的弹性群集(预览版)。
连接池
Postgres 使用基于进程的模型进行连接。 这种模型使得维护大量空闲连接的效率低下。 某些多租户体系结构需要许多活动连接,这会对 Postgres 服务器的性能产生负面影响。
默认情况下,Azure Database for PostgreSQL 灵活服务器中会安装通过 PgBouncer 建立连接池。
如需了解更多信息,请参阅以下文章:
- Azure Database for PostgreSQL 灵活服务器中的 PgBouncer
- Azure Cosmos DB for PostgreSQL 中的连接池
- 为 Azure Database for PostgreSQL 安装和设置 PgBouncer 连接池代理的步骤
Microsoft Entra 身份验证
Azure Database for PostgreSQL 灵活服务器支持使用 Microsoft Entra ID 进行连接身份验证。 此功能使多租户环境中的应用程序工作负载能够使用特定于租户的服务主体或托管标识向数据库进行身份验证。 数据库访问权限可以限定为单个租户。 通过将Microsoft Entra ID 身份验证与特定于租户的行安全策略相结合,可以降低应用程序从多租户数据库中访问另一租户数据的风险。
如需了解更多信息,请参阅以下文章:
Azure 机密计算(预览版)
Azure Database for PostgreSQL 灵活服务器通过受信任的执行环境(TEE)支持 Azure 机密计算,这些环境为正在使用的数据提供基于硬件的保护。 此功能可保护租户数据免受作系统、虚拟机监控程序或其他应用程序的未经授权的访问。
对于处理敏感数据的多租户解决方案,机密计算在处理过程中提供硬件级数据保护。 当租户具有严格的数据保护要求或法规合规性需求或需要确保应用程序提供程序无法访问租户数据时,请使用机密计算。
注意
机密计算目前为预览版,需要特定的虚拟机 SKU。
有关详细信息,请参阅 Azure Database for PostgreSQL 的 Azure 机密计算(预览版)。
加密
Azure Database for PostgreSQL 灵活服务器中存储的数据默认使用Microsoft管理的密钥进行静态加密,但也可以使用客户管理的密钥(CMK)允许租户指定其自己的加密密钥。
使用 CMK 时,可以提供存储在 Azure Key Vault 中的自己的加密密钥。 在多租户环境中,此方法使你能够对不同的租户使用不同的加密密钥,即使其数据存储在同一数据库服务器中也是如此。 此功能还使租户能够控制自己的加密密钥。 如果租户选择停用其帐户,则删除关联的密钥可确保其数据不再可访问。
Azure Database for PostgreSQL 灵活服务器支持 CMK 的 自动密钥版本更新 。 此功能在 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。