Ключевым отличием архитектуры 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» для более точного исключения уже имеющихся у клиента объектов, а также изменениями для диагностики сетевых проблем и отслеживания медленных операций.
Источник: http://www.opennet.ru/opennews/art.shtml?num=66603
