Skip to content
AI-Daily-Builder

2026-10-25 — views

OpenAI 详解如何扩展 Azure Cosmos DB 以支持 Habitat 存储平台

为什么值得读 一个在超大规模全球部署中平衡多租户效率与隔离需求的案例研究。

OpenAI 工程师详解如何在 Habitat 中优化 Azure Cosmos DB,以支持跨 40 个区域的超十亿用户,平衡多租户效率与隔离需求。

使用 Azure Cosmos DB 扩展 Habitat

OpenAI 详细阐述了其扩展 Habitat(其在线存储平台)工程之旅的第二部分,该平台旨在服务超过 10 亿 ChatGPT 用户。该平台需要在 40 个地理区域实现毫秒级响应时间,并依赖 Azure Cosmos DB 作为其底层存储组件。通过与 Azure 团队紧密合作,OpenAI 开发了一种可行的多租户方法,使用共管容器在超大规模下实现了卓越的读取性能。

多租户权衡

随着基础设施的扩展,团队通常会从提供隔离但需要昂贵过度配置的单租户系统,过渡到由集中式数据库团队管理的多租户系统。虽然多租户提高了资源效率,但也引入了诸如“嘈杂邻居”等挑战,即一个租户的高负载会降低其他租户的性能。Habitat 的演进经历了一个循环过程:最初使用单个多租户容器,随后转向单租户后端容器以实现隔离,最终又回归到多租户默认模式,以平衡效率和可靠性。

解决分区限制

最初,Habitat 依赖 Azure Cosmos DB 的原语,允许任何客户端负载通过,同时依赖每个逻辑分区键声明的 10,000 RU/s 限制。这种方法面临三个主要问题。首先,当不同的产品用例共享 user_id 或 workspace_id 等键时,会发生逻辑分区键冲突,从而限制吞吐量。其次,由于逻辑分区共享物理分区限制,出现“嘈杂邻居”问题,导致小众工作负载干扰核心流程。第三,由于物理分区拆分导致弱分区;随着数据量增加,每个分区的吞吐量容量缩小,降低了存储密集型用例的性能。

实施工作负载隔离

为了缓解这些问题,OpenAI 通过为关键的新用例使用单独的 Azure Cosmos DB 容器来引入工作负载隔离。这允许每个容器拥有独立的物理分区,从而减少“嘈杂邻居”效应。工程师还实施了脚本,以同步总预配吞吐量与物理分区的数量,防止在拆分期间容量缩减。然而,遗留的关键用例仍然被困在共享的默认容器中,导致压力增加和生产事故。因此,OpenAI 开始为任何新服务或主要功能配置单独的容器,以保护默认容器免受过度负载的影响。

实务笔记

大规模使用 Azure Cosmos DB 的开发者应密切监控物理分区拆分,因为它们可能会在无声中降低每个分区的有效吞吐量。通过为高流量或关键服务使用单独的容器来实施严格的工作负载隔离,可以防止“嘈杂邻居”问题并确保可靠的性能。


来源

标签

请喝咖啡