你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure Cosmos DB 中矢量搜索的多租户
“OpenAI 依赖 Cosmos DB 来动态缩放有史以来增长最快的消费者应用之一 - ChatGPT 服务,实现高可靠性和低维护。”- Satya Nadella
Azure Cosmos DB 脱颖而出,它是世界上第一个具有矢量搜索的全功能无服务器操作数据库,提供无与伦比的可伸缩性和性能。 通过使用 Azure Cosmos DB,用户可以增强其矢量搜索功能,确保多租户应用程序的高可靠性和低维护。
多租户使数据库的单一实例能够同时为多个客户或租户提供服务。 这种方法可有效地共享基础结构和运营开销,从而节省成本并简化管理。 这是 SaaS 应用程序和一些内部企业解决方案的关键设计考虑因素。
多租户引入了复杂性。 系统必须高效缩放,以在所有租户中保持高性能,这些租户可能具有独特的工作负载、要求和服务级别协议 (SLA)。
想象一下名为 ResearchHub 的虚构 AI 辅助研究平台。 ResearchHub 为数千家公司和个人研究人员提供服务,管理不同的用户群、数据规模和 SLA。 确保低查询延迟和高性能对于保持出色的用户体验至关重要。
Azure Cosmos DB 凭借其 DiskANN 矢量索引功能,简化了多租户设计,为高性能应用程序提供高效的数据存储和访问机制。
Azure Cosmos DB 中的多租户模型
在 Azure Cosmos DB 中,我们推荐两种主要方法来管理多租户:每租户分区键或每租户帐户,每种方法都有各自的优势和权衡。
1.每租户分区键
对于较高的租户密度和较低的隔离,每租户分区键模型是有效的。 在给定容器中向每个租户分配一个唯一的分区键,从而实现对数据的逻辑分离。 当每个租户的工作负载量大致相同时,此策略最有效。 如果存在明显偏差,客户应考虑将这些租户隔离在自己的帐户中。 此外,如果单个租户的数据超过 20 GB,应使用分层分区键 (HPK)。 特别是对于矢量搜索,如果矢量搜索查询可集中于特定分区或分区集,quantizedFlat 索引的性能可能非常好。
优点:
- 成本效益:跨多个租户共享单个 Cosmos DB 帐户可降低开销。
- 可伸缩性:可管理大量租户,每个租户都隔离在其分区键中。
- 简化管理:需要管理的 Cosmos DB 帐户更少。
- 分层分区键 (HPK):优化具有大量租户的多租户应用中的数据组织和查询性能。
缺点:
- 资源争用:共享资源可能会导致高峰使用期争用。
- 隔离有限:逻辑隔离而非物理隔离,不符合严格隔离要求。
- 灵活性较低:降低每个租户在实现异地复制、时间点还原 (PITR) 和客户管理的密钥 (CMK) 等帐户级功能方面的灵活性。
分层分区:数据组织得到增强
分层分区基于“每租户分区键”模型构建,增加了更深层次的数据组织。 这种方法涉及到创建多个级别的分区键,以便进行更精细的数据管理。 分层分区的最低级别应具有较高的基数。 通常,建议对此级别使用 ID/guid,确保每个租户超过 20 GB 的连续可伸缩性。
优点:
- 优化查询:在父分区级别更精确地定位子分区,从而降低查询延迟。
- 改进的可伸缩性:有助于更深入的数据分段,便于更轻松地缩放。
- 更好的资源分配:均匀分配工作负载,最大限度地减少高租户计数带来的瓶颈。
注意事项:
- 如果应用程序的租户非常少,并且使用分层分区,这可能会导致瓶颈,因为具有相同一级键的所有文档都将写入相同的物理分区。
示例:ResearchHub 可以将每个租户分区中的数据按“DepartmentId”和“ResearcherId”等不同级别组织来实现分层,方便高效管理和查询。
2.每租户帐户
为了实现最大程度的隔离,最好使用每租户帐户模型。 每个租户都获得一个专用 Cosmos DB 帐户,确保资源完全分离。
优点:
- 高隔离:由于专用资源,没有争用或干扰。
- 自定义 SLA:可根据单个租户需求定制资源和 SLA。
- 增强的安全性:物理数据隔离确保了可靠的安全性。
- 灵活性:租户可以根据需要实现异地复制、时间点还原 (PITR) 和客户管理的密钥 (CMK) 等帐户级功能。
缺点:
- 增加管理:增加了管理多个 Cosmos DB 帐户的复杂性。
- 成本更高:更多帐户意味着更高的基础结构成本。
使用客户管理的密钥进行安全隔离
Azure Cosmos DB 为数据加密启用了客户管理的密钥,为多租户环境添加额外的安全层。
实施步骤:
- 设置 Azure Key Vault:安全地存储加密密钥。
- 链接到 Cosmos DB:将 Key Vault 与 Cosmos DB 帐户关联。
- 定期轮换密钥:定期更新密钥来增强安全性。
使用客户管理的密钥可确保每个租户的数据都是唯一加密的,从而提供可靠的安全性和合规性。
其他隔离模型
容器和数据库隔离
除了每租户分区键模型和每租户帐户模型外,Azure Cosmos DB 还提供其他隔离方法,例如容器隔离和数据库隔离。 这些方法提供不同程度的性能隔离,尽管它们不提供与每租户帐户模型相同的安全隔离级别。
容器隔离
在容器隔离模型中,在共享 Cosmos DB 帐户中向每个租户分配一个单独的容器。 通过此模型,可在性能和资源分配方面实现某种程度的隔离。
优点:
- 更好的性能隔离:可以向容器分配特定的性能资源,最大限度地减少一个租户工作负载对其他租户的工作负载的影响。
- 更易于管理:管理单个帐户中的多个容器通常比管理多个帐户更容易。
- 成本效益:类似于每租户分区键模型,此方法可降低多个帐户的开销。
缺点:
- 安全隔离有限:与单独的帐户不同,同一帐户中的容器不提供物理数据隔离。 因此,此模型可能无法满足严格的安全要求。
- 资源争用:如果违反了资源限制,一个容器中的繁重工作负载仍会影响其他容器。
数据库隔离
数据库隔离模型在共享 Cosmos DB 帐户中为每个租户分配一个单独数据库。 这在资源分配和管理方面提供了增强的隔离。
优点:
- 增强性能:单独的数据库可降低资源争用的风险,从而提供更好的性能隔离。
- 灵活的资源分配:可以在数据库级别分配和管理资源,从而提供定制的性能功能。
- 集中管理:与多个帐户相比更易于管理,但提供比容器级分离还要多的隔离。
缺点:
- 安全隔离有限:类似于容器隔离,在单个帐户中具有单独的数据库不提供物理数据隔离。
- 复杂性:管理多个数据库比管理容器要复杂得多,尤其是在租户数量增加时。
虽然容器隔离模型和数据库隔离模型不提供与每租户帐户模型相同的安全隔离级别,但它们仍可用于实现性能隔离和灵活的资源管理。 这些方法适用于优先考虑成本效益和简化管理,而严格的安全隔离不是关键要求的场景。
通过仔细评估多租户应用程序的特定需求和约束,可以在 Azure Cosmos DB 中选择最适合的隔离模型,平衡性能、安全性和成本考量,从而为租户实现最佳结果。
实际实现注意事项
使用 Cosmos DB 设计多租户系统时,请考虑以下因素:
- 租户工作负载:评估数据大小和活动以选择适当的隔离模型。
- 性能要求:使体系结构与定义的 SLA 和性能指标保持一致。
- 成本管理:根据隔离和性能需求平衡基础结构成本。
- 可伸缩性:通过选择可缩放模型,针对增长进行规划。
Azure Cosmos DB 中的实际实现
每租户分区键:
- 分配分区键:每个租户的唯一键可确保逻辑分离。
- 存储数据:租户数据仅限于相应的分区键。
- 优化查询:使用分区键实现高效、有针对性的查询。
分层分区:
- 创建多级密钥:进一步组织租户分区中的数据。
- 针对性的查询:使用精确的子分区目标增强性能。
- 管理资源:均匀分配工作负载以防止瓶颈。
每租户帐户:
- 提供单独的帐户:每个租户都获取专用的 Cosmos DB 帐户。
- 自定义资源:根据租户要求定制性能和 SLA。
- 确保安全性:物理数据隔离提供可靠的安全性和合规性。
将 Azure Cosmos DB 与矢量搜索配合使用的最佳做法
Azure Cosmos DB 对 DiskANN 矢量索引功能的支持使得它非常适合需要快速、高维搜索的应用程序,例如 AI 辅助研究平台(如 ResearchHub)。 下面介绍了如何利用这些功能:
高效存储和检索:
- 矢量索引:使用 DiskANN 矢量索引高效地存储和检索高维矢量。 对于在大型数据集中涉及相似性搜索(例如图像识别或文档相似性)的应用程序,这非常有用。
- 性能优化:DiskANN 矢量搜索功能可实现快速、准确的搜索,确保低延迟和高性能,这对于保持良好的用户体验至关重要。
跨租户缩放:
- 每租户分区键:利用分区键逻辑隔离租户数据,同时受益于 Cosmos DB 的可缩放基础结构。
- 分层分区:实现分层分区来进一步细分每个租户分区中的数据,从而提高查询性能和资源分布。
安全性和合规性:
- 客户管理的密钥:实现客户管理的密钥进行静态数据加密,确保每个租户的数据都安全隔离。
- 常规密钥轮换:定期轮换存储在 Azure Key Vault 中的加密密钥来提高安全性。
实际示例:实现 ResearchHub
每租户分区键:
- 分配分区键:为每个组织(租户)分配唯一的分区键。
- 数据存储:租户的所有研究人员的数据都存储在其分区中,确保逻辑分离。
- 查询优化:查询是使用租户的分区键执行的,通过隔离数据访问来提高性能。
分层分区:
- 多级分区键:租户分区中的数据按“DepartmentId”和“ResearcherId”等相关属性进一步分段。
- 精细数据管理:这种分层方法使 ResearchHub 能够更高效地管理和查询数据、从而降低延迟并缩短响应时间。
每租户帐户:
- 单独的 Cosmos DB 帐户:向备受瞩目的客户端或具有敏感数据的客户端提供单个 Cosmos DB 帐户。
- 自定义配置:资源和 SLA 经过定制来满足每个租户的特定需求,确保最佳性能和安全性。
- 增强的数据安全性:使用客户管理的加密密钥物理分离数据可确保可靠的安全合规性。
结束语
Azure Cosmos DB 中的多租户(尤其是其 DiskANN 矢量索引功能)提供强大的解决方案,用于构建可缩放的高性能 AI 应用程序。 无论是选择每租户分区键、分层分区还是每租户帐户模型,都可以有效地平衡成本、安全性和性能。 使用这些模型和最佳做法,可以确保多租户应用程序满足客户的多样化需求,从而提供出色的用户体验。
Azure Cosmos DB 提供了构建可靠、安全且可缩放的多租户环境所需的工具。 借助 DiskANN 矢量索引的强大功能,可以提供驱动 AI 应用程序的快速高维搜索。
矢量数据库解决方案
Azure PostgreSQL Server pgvector 扩展