|
Компания OpenAI анонсировала проект Pando, в рамках которого разработан новый бэкенд, совместимый с протоколом и инструментарием Git, и уже внедрённый для обслуживания внутреннего монолитного репозитория компании. Необходимость создания собственного хранилища для Git объясняется экспоненциальным ростом числа параллельных операций "push" и "fetch" из-за массового использования AI-агентов в компании OpenAI, к которым не удалось применить классические подходы к масштабированию Git, такие как трёхфазные коммиты и журнал упреждающей записи (WAL). Внедрение Pando позволило сократить медианную задержку при выполнении push-операций почти на 80% и значительно повысить надёжность операций слияний. Развёрнутый на базе Pando репозиторий в OpenAI обрабатывает около петабайта Git-данных в сутки с пиковыми нагрузками до 57 ТБ данных в час.
Ключевым отличием архитектуры Pando от штатного хранилища Git стал отказ от обеспечения в каждый момент времени глобальной согласованности веток и ссылок на уровне всего репозитория в пользу причинно-следственной согласованности (causal consistency) для отдельных веток. Новый подход дал возможность обрабатывать push-запросы параллельно и обновлять разные ветки независимо без выставления блокировок. Для метаданных задействована отдельная распределённая БД, в которой хранятся указатели на ветки (refs) и данные о том, какие именно коммиты и объекты находятся внутри сохранённых pack-файлов.
Для снижения нагрузки на CPU и накопитель вместо генерации уникального pack-файла для каждого клиента, при fetch-операциях pack-файлы сохраняются как неизменяемые объекты в общем blob-хранилище и раздаются другим клиентам напрямую из кэша. Чтобы pack-файлы можно было повторно использовать, при выполнении операции "push" сервер показывает клиенту только основную ветку (trunk), что гарантирует предсказуемые зависимости в pack-файле. Для передачи клиентам недостающих данных применяется фоновая упаковка, реализованная по аналогии с LSM-деревьями (множество мелких пакетов объединяются в более крупные и лучше сжатые).
Бэкенд Pando написан на языке Rust и доведён до готовности к внедрению за 10 недель. Большая часть кода сгенерирована и протестирована AI-агентами с применением формальной верификации c использованием языков TLA+ (Temporal Logic of Actions + Data) и Lean. В дальнейшем OpenAI планирует использовать Pando не только для классической разработки, но и для координации работы больших групп AI-агентов, совместно модифицирующих общий код в реальном времени.
Исходный код бэкенда Pando, охватывающего серверные компоненты для хранения репозитория и обработки протокола Git, пока не опубликован, но компания OpenAI не исключает его распространение в будущем и рассматривает возможность предоставления доступа к технологиям Pando сторонним пользователям. При этом изменения и оптимизации, внесённые в протокол и штатный инструментарий Git, развиваются в общедоступном git-репозитории и передаются для включения в основной состав Git. Например, проекту Git переданы патчи c расширением протокола packfile-uri для организации параллельной загрузки индексов и pack-файлов, реализацией концепции "explicit haves" для более точного исключения уже имеющихся у клиента объектов, а также изменениями для диагностики сетевых проблем и отслеживания медленных операций.
|