Как OpenAI масштабировала свою платформу хранения данных для 1 миллиарда пользователей
Внутренняя платформа хранения данных OpenAI, Habitat, является критически важным каркасом, который обеспечивает работу всех продуктов компании, требуя быстрого и высоконадежного доступа к данным для беспрецедентной пользовательской базы, превышающей миллиард человек. В этом техническом обзоре, Часть II, подробно описывается монументальные инженерные усилия, необходимые для масштабирования Habitat, который превратился из простой клиентской библиотеки в глобально распределенную систему хранения данных, способную управлять более чем 500 петабайтами данных. Основная проблема, которую удалось решить, заключалась в том, как поддерживать пиковую производительность и надежность при одновременном accommodateровании взрывного, непредсказуемого роста и интеграции новых, сложных сценариев использования в сорока различных географических регионах. Команда поняла, что простого масштабирования недостаточно; им пришлось фундаментально переосмыслить всю архитектуру своей платформы онлайн-хранилища.
Путь масштабирования Habitat включал непрерывный процесс оценки сложных компромиссов, проходя через этапы повышения надежности, глобальной скорости и, наконец, овладения массивным операционным масштабом. Эта эволюция потребовала выхода за рамки первоначальных, более простых дизайнов для создания надежной, корпоративного уровня инфраструктуры, способной поддерживать критически важный для бизнеса трафик продуктов.
Техническое ядро этих усилий по масштабированию было сосредоточено на оптимизации базового компонента базы данных: Azure Cosmos DB. Команда тесно сотрудничала с командой инженеров Azure, чтобы разработать сложный, жизнеспособный подход к мультиарендности с использованием совместно управляемых контейнеров. Это решение оказалось критически важным, поскольку оно обеспечивало отличную производительность чтения при работе в массивном глобальном масштабе, позволяя нескольким продуктовым командам эффективно использовать ресурсы, не жертвуя при этом производительностью.
Прежде чем углубляться в конкретные методы масштабирования Cosmos DB, статья предоставляет необходимый контекст относительно архитектурной дилеммы резидентности и арендности данных. По мере роста любой крупной компании ее инфраструктурные команды сталкиваются с выбором между одноарендными и мультиарендными системами. Одноарендность, при которой каждая продуктовая команда поддерживает свою собственную изолированную базу данных, обеспечивает четкие границы владения и минимизирует «радиус взрыва» в случае сбоя. Однако эта модель становится непомерно дорогой и сложной для управления в масштабе, вынуждая каждую команду самостоятельно заниматься планированием мощностей, что часто приводит к значительному избыточному выделению ресурсов. И наоборот, мультиарендность централизует контроль в рамках одной команды баз данных, используя ее глубокую экспертизу в предоставлении ресурсов. Однако основной недостаток мультиарендности — это риск проблем «шумного соседа», когда один единственный, ресурсоемкий арендатор может потреблять необычно большую долю общих ресурсов, тем самым ухудшая производительность и надежность для всех остальных арендаторов.
Habitat пришлось пройти через этот сложный баланс. Путь команды был циклическим: изначально они использовали один мультиарендный контейнер Azure Cosmos DB, затем выделяли контейнеры с одноарендным бэкингом и в конечном итоге вернулись к настройке по умолчанию с мультиарендным контейнером. Этот итеративный процесс подчеркивает сложность построения масштабируемой системы, которая должна поддерживать обширный и разнообразный набор сценариев использования. Что особенно важно, команде удалось отложить крупные инвестиции в этой области, максимально используя встроенные примитивы и функции Azure Cosmos DB.
Чтобы понять техническое решение, необходимо сначала освоить основы Azure Cosmos DB. Учетная запись определяет набор контейнеров и политику репликации, которая диктует, как данные копируются в различных географических регионах. Каждый контейнер выделяется с определенным лимитом пропускной способности, измеряемым в Единицах запроса в секунду (RU/s). Кроме того, данные внутри этих контейнеров структурируются с использованием логического ключа раздела, который является основным способом организации и доступа к данным. Cosmos DB обрабатывает физическое хранение путем шардирования этих логических ключей разделов по нескольким физическим разделам. Этот механизм шардирования автоматически разделяет данные на большее количество физических разделов, когда объем хранения превышает определенный порог или когда контейнеру требуется больше физических разделов для поддержания выделенной пропускной способности. Изначально команда разрешила любую нагрузку от клиентов, полагаясь на заявленный лимит 10K RU/s на каждый логический ключ раздела для обеспечения необходимого обратного давления и контроля.
Однако эта первоначальная, простая настройка оказалась проблематичной. Ранний дизайн API напрямую раскрывал выбор логического ключа раздела клиентским приложениям. Это привело к критической проблеме: частые коллизии по часто используемым ключам разделов, таким как user_id или workspace_id. Поскольку несколько различных продуктовых сценариев использования делили одними и теми же ограниченными ресурсами Azure Cosmos DB и полагались на одни и те же общие ключи, система быстро достигла своих пределов, что затруднило гарантирование стабильной производительности и надежности по мере взрыва пользовательской базы. Успешное решение потребовало перехода от простой, общей контейнерной модели к сложной, совместно управляемой мультиарендной контейнерной модели, которая могла изолировать использование ресурсов при сохранении глобальной масштабируемости.
Эти усилия по масштабированию представляют собой массивный подвиг в области инженерии распределенных систем, демонстрирующий, как базовый инфраструктурный уровень должен развиваться для поддержки самых амбициозных целей роста в индустрии ИИ. Способность управлять петабайтами данных при сохранении миллисекундного времени отклика для более чем миллиарда пользователей — это не просто техническое достижение; это ключевой фактор, обеспечивающий всю линейку продуктов OpenAI, доказывая, что базовая инфраструктура может масштабироваться так же быстро и непредсказуемо, как сами модели ИИ.
Почему это важно
- —Подробно описывает сложные архитектурные компромиссы (однопользовательская vs. многопользовательская аренда), необходимые для создания надежной, крупномасштабной платформы данных.
- —Предоставляет глубокое техническое понимание масштабирования распределенных баз данных (Azure Cosmos DB) для обработки петабайтов данных и миллиардов пользователей.
- —Разработанное решение является образцом для других крупномасштабных ИИ-компаний, которым необходимо управлять ростом инфраструктуры и конфликтами ресурсов.
Ключевые факты
- Habitat — это платформа хранения данных OpenAI, обслуживающая более 500 петабайт данных.
- Платформа должна отвечать в течение миллисекунд более чем 1 миллиарду пользователей в 40 географических регионах.
- Решение о масштабировании включало внедрение подхода многопользовательской аренды с использованием совместно управляемых контейнеров в Azure Cosmos DB.
- Первоначальные настройки с одним контейнером не удались из-за частых коллизий по общим логическим ключам разделения (например, user_id).
Полный текст — в первоисточнике. Здесь — краткое изложение и ключевые факты.