Как OpenAI удержала Azure Cosmos DB под нагрузкой 1 млрд пользователей ChatGPT

Инженеры OpenAI Джон Ли, Грачья Акопян и Чаомин Юй рассказали, как перестраивали хранилище Habitat — систему, которая отвечает за миллисекунды на запросы более миллиарда пользователей ChatGPT в 40 регионах. В основе Habitat лежит Azure Cosmos DB, и команде пришлось три раза менять подход к тому, как делить базу между разными продуктами, чтобы избежать аварий и ускорить работу. Сначала все продукты работали в одной общей базе — это вызывало конфликты: один «шумный» клиент мог забрать всю пропускную способность и уронить логин для всех остальных. Тогда стали создавать отдельные базы под каждый крупный продукт — это решило проблему шума, но заставило команды вручную планировать нагрузку заранее, и запуски новых фич регулярно превращались в аварийные совещания. В итоге вместе с Microsoft доработали саму Cosmos DB — добавили троттлинг самых «горячих» ключей и приоритизацию запросов — и вернулись к одной общей базе, которая теперь сама балансирует нагрузку. • Крупнейший аккаунт Cosmos DB хранит десятки петабайт данных и держит более 20 млн запросов в секунду — по словам OpenAI, это самый крупный публично известный кейс использования сервиса. • В конце 2024 года авария с питанием в регионе показала, что переключение на резервный регион занимает несколько часов — такого масштаба отказа никто раньше не тестировал. • Команды OpenAI и Microsoft теперь совместно мониторят систему и имеют прямой канал связи для экстренных ситуаций, минуя стандартную техподдержку.

AI-обработка оригинала OpenAI Blog; редакция Hamidun News
Как OpenAI удержала Azure Cosmos DB под нагрузкой 1 млрд пользователей ChatGPT
Источник: OpenAI Blog. Коллаж: Hamidun News.
Слушать статью
Паспорт материала и цифры
ПараметрДанные
ПервоисточникOpenAI Blog ↗
Главный редактор
Ключевой факт #1Команды OpenAI и Microsoft теперь совместно мониторят систему и имеют прямой канал связи для экстренных ситуаций, минуя стандартную техподдержку.
Ключевой факт #2Разные продукты, использующие одинаковые по смыслу ключи (например, user_id), делили между собой этот лимит, хотя логически не должны были пересекаться.
Ключевой факт #3Планирование капасити размылось по всей компании вместо одной центральной команды, и качество этого планирования сильно разнилось от команды к команде.

Habitat — это внутренняя платформа хранения данных OpenAI, через которую проходят запросы ChatGPT, API, Codex и десятков внутренних сервисов. Она должна отвечать за миллисекунды, обслуживая больше миллиарда пользователей по всему миру, и хранит свыше 500 петабайт данных. Основной движок под капотом — Azure Cosmos DB. Инженеры OpenAI Джон Ли, Грачья Акопян и Чаомин Юй описали, как три раза перестраивали принцип распределения нагрузки между продуктами внутри этой базы, прежде чем нашли рабочую схему.

Проблема общей базы и «шумных соседей»

Изначально все продукты писали данные в одну общую базу данных (контейнер) Cosmos DB. У каждого ключа — например, идентификатора пользователя — есть лимит в 10 тысяч операций в секунду, но на практике лимит действует не на сам ключ, а на физический раздел диска, где этот ключ физически хранится вместе с другими. Это создавало две проблемы:

  • Разные продукты, использующие одинаковые по смыслу ключи (например, user_id), делили между собой этот лимит, хотя логически не должны были пересекаться.
  • Если один клиент резко увеличивал нагрузку на «свой» раздел, страдали вообще все остальные пользователи и фичи, чьи данные случайно лежали рядом — вплоть до сбоев входа в систему.

Дополнительно обнаружилась проблема «слабых разделов»: когда раздел диска разрастался и Cosmos DB делила его на два, пропускная способность каждого делилась пополам — то есть рост объёма данных сам по себе снижал скорость, даже если число запросов не менялось.

Изоляция через отдельные базы — и её цена

Решением стало создание отдельных баз для каждого крупного нового продукта или фичи. Это действительно убрало эффект «шумных соседей» — теперь перегрузка одного сервиса не сбивала остальные. Но у подхода оказалась обратная сторона:

  • Команды продуктов должны были сами заранее заказывать нужную пропускную способность под запуск — и часто забывали это делать, из-за чего запуски сопровождались экстренными совещаниями по масштабированию в последний момент.
  • Нагрузка, которая в общей базе была бы незаметной каплей (рост с 1 тысячи до миллиона запросов в секунду — это всего 5% от общей ёмкости), в отдельной базе могла составлять тысячекратное превышение запланированных ресурсов.
  • Планирование капасити размылось по всей компании вместо одной центральной команды, и качество этого планирования сильно разнилось от команды к команде.

Возврат к общей базе — но с умной балансировкой

Поняв, что ни один из подходов не масштабируется организационно, команда Habitat вместе с инженерами Microsoft переработала саму механику Cosmos DB:

  • Добавили троттлинг самых «горячих» ключей в первую очередь — так, чтобы один агрессивный клиент не мог забрать всю пропускную способность раздела.
  • Ввели приоритизацию запросов (QoS): фоновые задачи вроде массовых выгрузок данных теперь обрезаются первыми, а интерактивные запросы пользователей — в последнюю очередь.
  • Вместе с Azure доработали бессерверный режим Cosmos DB, поднявший лимит с 5 до 10 тысяч операций в секунду на раздел и добавивший автоматическое разделение по нагрузке, а не только по объёму данных.

Это позволило вернуться к одной общей базе без ручного планирования капасити — и, по словам авторов, за несколько месяцев после перехода не было ни одной аварии из-за перегрузки или «шумных соседей».

Совместная инженерия с Microsoft

Крупнейший аккаунт Cosmos DB у OpenAI хранит десятки петабайт и держит более 20 миллионов запросов в секунду — авторы называют это крупнейшим известным им развёртыванием сервиса. На таком масштабе типовая поддержка облачного провайдера перестаёт работать: в конце 2024 года авария с электропитанием в одном из регионов показала, что переключение на резервный регион для аккаунтов такого размера занимает несколько часов — это никто не тестировал на подобных объёмах. Месяц позже при обратном переключении возникла вторая авария: клиенты массово ринулись переподключаться к исходному региону и перегрузили его шлюз, хотя туда вернулась лишь часть данных.

После этих инцидентов команды OpenAI и Azure выстроили прямое взаимодействие: общие дашборды, совместное тестирование на копии продакшн-аккаунта, прямые каналы связи в Teams и возможность напрямую «запейджить» друг друга в обход стандартной техподдержки. За последний год они совместно доработали масштабируемость шлюза Cosmos DB, добавили кэширование метаданных, сократили число подключений со стороны Python-сервисов Habitat и развели критичные и фоновые нагрузки по разным сетям.

Главный вывод для инженерных команд: многопользовательские (shared) системы дешевле и проще в эксплуатации, но требуют built-in механизмов изоляции от самого провайдера — без них единственная альтернатива — ручное разделение на отдельные базы, которое просто перекладывает проблему капасити-планирования на десятки команд.

Сюжет

Вопросы и ответы по материалу

Что известно по теме: проблема общей базы и «шумных соседей»?

Изначально все продукты писали данные в одну общую базу данных (контейнер) Cosmos DB. У каждого ключа — например, идентификатора пользователя — есть лимит в 10 тысяч операций в секунду, но на практике лимит действует не на сам ключ, а на физический раздел диска, где этот ключ физически хранится вместе с другими. Это создавало две проблемы: Разные продукты, использующие одинаковые по смыслу ключи (например, user_id), делили между собой этот лимит, хотя логически не должны были пересекаться. Если один клиент резко увеличивал нагрузку на «свой» раздел, страдали вообще все оста

Что известно по теме: изоляция через отдельные базы — и её цена?

Решением стало создание отдельных баз для каждого крупного нового продукта или фичи. Это действительно убрало эффект «шумных соседей» — теперь перегрузка одного сервиса не сбивала остальные. Но у подхода оказалась обратная сторона: Команды продуктов должны были сами заранее заказывать нужную пропускную способность под запуск — и часто забывали это делать, из-за чего запуски сопровождались экстренными совещаниями по масштабированию в последний момент. Нагрузка, которая в общей базе была бы незаметной каплей (рост с 1 тысячи до миллиона запросов в секунду — это всего 5% от об

Что известно по теме: возврат к общей базе — но с умной балансировкой?

Поняв, что ни один из подходов не масштабируется организационно, команда Habitat вместе с инженерами Microsoft переработала саму механику Cosmos DB: Добавили троттлинг самых «горячих» ключей в первую очередь — так, чтобы один агрессивный клиент не мог забрать всю пропускную способность раздела. Ввели приоритизацию запросов (QoS): фоновые задачи вроде массовых выгрузок данных теперь обрезаются первыми, а интерактивные запросы пользователей — в последнюю очередь. Вместе с Azure доработали бессерверный режим Cosmos DB, поднявший лимит с 5 до 10 тысяч операций в секунду на разд

ЖХ
Жемал Хамидун — CPO Alpina Digital, продакт-менеджер AlpinaGPT. Делает AI-продукты с 2019 года. Hamidun News — pet project, который вырос в production-агрегатор с 6000+ читателей.
✦ Закрытый клуб практиков · Vibe Club

Внедряйте ИИ быстрее рынка вместе с инженерами и фаундерами

Внутри Vibe Club (hamidun.com/club): еженедельные живые мастермайнды и разборы архитектуры с Жемалом Хамидуном, закрытый Tech Radar, LMS и обновляемая база из 370+ боевых скиллов.

Вступить в Vibe Club →Тест-драйв Академии (72ч)
Что вы думаете?
Загружаем комментарии…