OpenAI 存储平台 Habitat 的规模化之路

为什么需要重新设计在线存储平台
当用户量从百万级飙升到 10 亿+,并且横跨 40 个地理区域 时,任何存储系统都会面临极限考验。OpenAI 的在线存储平台 Habitat 就是这样一个案例——它需要在毫秒级响应所有产品(ChatGPT、API、Codex 等)的数据读写请求,同时管理超过 500 PB 的数据量。
Habitat 的职责远不止简单的数据存取。它需要处理 缓存、ACL 权限控制、数据驻留合规、加密、多租户隔离、限流、请求整形、路由分发 等一系列复杂功能。底层的存储资源包括 Azure Cosmos DB、Nanobase、Valkey 缓存、Blob 存储,以及通过 CDC 服务同步到 Databricks、Rockset、Kafka 等下游系统。
对开发者的启示:如果你的系统也需要同时满足低延迟、全球分布、多租户隔离和合规要求,Habitat 的架构思路值得参考——尤其是它如何在可靠性和性能之间做取舍。
从单租户到多租户:一条曲折的演进路径
很多团队在初期会采用 单租户架构——每个产品团队维护自己的独立数据库实例。这样做的好处是 爆炸半径小、所有权边界清晰、工作负载天然隔离。但随着产品线和团队数量增长,单租户的成本问题迅速显现:每个团队都要自己做容量规划,往往导致 大量资源过度配置。
多租户方案将控制权集中到一个数据库团队手中,利用专业经验进行统一资源调度,效率更高。但多租户也带来了 "吵闹邻居"问题——某个租户可能消耗不成比例的资源,影响其他租户的性能。
Habitat 团队经历了一个 "多租户 → 单租户 → 回归多租户" 的循环过程:
- 最初:使用一个共享的多租户 Azure Cosmos DB 容器
- 遇到问题后:为每个产品面单独分配单租户容器
- 最终方案:回归多租户,但通过更精细的机制来管理隔离
实用解读:这个循环并非弯路,而是很多基础设施团队都会经历的典型路径。关键不是选择哪种方案,而是 在正确的时间点做出正确的权衡。
Azure Cosmos DB 多租户的核心设计
Habitat 团队与 Azure 团队深度合作,最终实现了一种 "共管容器"(co-managed containers) 的多租户方案,在大规模全球场景下取得了优秀的读取性能。
Cosmos DB 容器基础知识
理解这个方案前,需要先了解几个核心概念:
- Azure Cosmos DB 账户:定义一组容器和复制策略
- 容器(Container):按每秒请求单元(RU/s)预配置吞吐量
- 吞吐量单位:RU/s 是 Cosmos DB 衡量读写负载的标准单位
共管容器的价值
"共管容器"方案的核心思想是:多个产品团队共享同一个 Cosmos DB 容器,但通过精细的分区键设计和请求整形来保证隔离性。这比为每个团队单独创建容器更经济,又比完全无管理的共享更安全。
对开发者的建议:如果你也在考虑 Cosmos DB 的多租户设计,可以从以下方面入手:
- 分区键选择:避免热点分区,选择分布均匀的键
- 吞吐量隔离:利用 Cosmos DB 的限流和重试机制
- 监控告警:对 RU 消耗异常进行实时检测
可靠性 → 性能 → 规模:三步走策略
Habitat 团队遵循了一个清晰的演进模式:
- 先可靠:确保系统能承载关键产品流量
- 再快速:优化到全球用户可接受的延迟水平
- 最后规模化:在超大规模下保持敏捷运维
这个顺序很重要——跳过可靠性直接追性能,或者在性能未达标时强行扩大规模,都会导致系统性风险。
总结:Habitat 的案例告诉我们,大规模存储系统的成功不是靠单一技术突破,而是靠 架构演进的节奏感、与云厂商的深度合作、以及对多租户隔离的持续投入。



本文目录(6 节)
本文基于 OpenAI Blog 的公开内容,由 AI 辅助整理改写后发布。
原标题:Rapidly scaling online storage to serve over 1 billion ChatGPT users (Part II)
阅读原文