[Высокая производительность, Git, Управление разработкой, Управление продуктом] Одна строка, которая ускорила клонирование в 100 раз (перевод)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Наша группа по оптимизации производительности нашла маленькое изменение, которое оказало большое влияние на скорость сборки по всем конвейерам. Мы обнаружили, что установка параметра refspec во время git fetch ускоряет шаг клонирования в 100 раз.
Группа Engineering Productivity отвечает за поддержку инженеров, которые создают и развёртывают программное обеспечение в Pinterest. Наша команда поддерживает ряд инфраструктурных сервисов и часто работает над крупными проектами — перенос всего программного обеспечения на Bazel, создание платформы непрерывной доставки под названием Hermez. Они же поддерживают монорепозитории, куда ежедневно присылают по несколько сотен коммитов, и это ещё не все их задачи.
Мы направляем большие усилия на то, чтобы разработка и доставка программного обеспечения в Pinterest происходили быстро и безболезненно. Недавно жизнь ещё раз показала, какое большое влияние может оказать даже самая мелкая деталь. Мы нашли такую маленькую деталь в Git, которая значительно сократила время сборки в наших конвейерах непрерывной интеграции. Чтобы понять, как это маленькое изменение оказало такое большое влияние, нужно поделиться некоторой информацией о наших монорепозиториях и конвейерах.
Монорепозитории и конвейеры
У нас в Pinterest шесть основных репозиториев: Pinboard, Optimus, Cosmos, Magnus, iOS и Android. Всё это монорепозитории с большим наборов сервисов, специфичных для языка. Pinboard — самый крупный монорепозиторий, который поддерживается с момента основания компании. В нём более 350 тыс. коммитов и размер 20 ГБ при полном клонировании.
Клонирование монорепозитория с большим объёмом кода и длительной историей занимает много времени, а в наших конвейерах непрерывной интеграции приходится делать это очень часто в течение дня. Для одного только Pinboard в рабочие дни мы делаем больше 60 тыс. git pull. Большинство скриптов конфигурации конвейера Jenkins (написанных на Groovy) начинаются с этапа Checkout, где мы клонируем репозиторий, который на более поздних этапах будет построен и протестирован. Вот как выглядит типичная стадия Checkout:
Если использовать Git CLI напрямую:
```
Даже при неполном/поверхностном (shallow) клонировании, не извлекая никаких тегов и только для последних 50 коммитов, операция всё равно выполнялась не так быстро, как могла бы. Всё потому, что мы не устанавливали параметр refspec. Обратите внимание, что отсутствие этого параметра означает команду на извлечение всех refspec'ов: +refs/heads/*:refs/remotes/origin/*. В случае с Pinboard происходит обработка более 2500 ветвей.
Просто добавив опцию refspec и указав, какие ссылки нас интересуют (в нашем случае только из мастера), можно ограничить область обработки нужной ветвью и сэкономить много времени. Вот как это выглядит в нашем конвейере:
Простое изменение одной строки сократило время клонирования в 100 раз и в результате значительно сократило время сборки. Время клонирования крупнейшего репозитория Pinboard сократилось с 40 минут до 30 секунд. Это показывает, что иногда даже самые маленькие усилия имеют очень большое значение.
===========
Источник:
habr.com
===========
===========
Автор оригинала: Urvashi Reddy, Adam Berry, Rui Li
===========Похожие новости:
- [Высокая производительность, Разработка веб-сайтов, JavaScript, Клиентская оптимизация, ReactJS] Производительность приложений, работающих с Video и Audio
- [Управление разработкой, Учебный процесс в IT, Управление персоналом] Работа с вовлеченными сотрудниками — как этого добиться? Часть 2
- [Высокая производительность, Производство и разработка электроники, Компьютерное железо, Процессоры] Энергопотребление новых CPU AMD под нагрузкой на 100 Вт ниже, чем у CPU Intel
- [Высокая производительность, Компьютерное железо, Накопители] NGD выпустила 12 ТБ SSD со встроенным 4-ядерным ARM-процессором
- [Управление разработкой, Управление проектами, Управление продуктом] How to prepare for PMP exam in 60 days
- [Системное администрирование, IT-инфраструктура, Управление разработкой, DevOps] Как Лёха стал инженером по SRE: выдуманная история про невыдуманные проблемы
- [Управление разработкой, Agile, Управление продуктом] WIP-лимиты здорового человека и WIP-лимиты курильщика
- [Исследования и прогнозы в IT, Управление продуктом, Сотовая связь, Будущее здесь] Мы посадили за телефон робота вместо человека и чуть все не сломали
- [Криптография, Python, SQLite, GitHub, Криптовалюты] Внедряем оплату BTC куда угодно (Python)
- [Управление проектами, Управление продуктом, Управление персоналом] «Свободные руки!» Культура аутстаффинга в ИТ
Теги для поиска: #_vysokaja_proizvoditelnost (Высокая производительность), #_git, #_upravlenie_razrabotkoj (Управление разработкой), #_upravlenie_produktom (Управление продуктом), #_pinterest, #_klonirovanie (клонирование), #_monorepozitorii (монорепозитории), #_jenkins, #_refspec, #_vysokaja_proizvoditelnost (
Высокая производительность
), #_git, #_upravlenie_razrabotkoj (
Управление разработкой
), #_upravlenie_produktom (
Управление продуктом
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:49
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Наша группа по оптимизации производительности нашла маленькое изменение, которое оказало большое влияние на скорость сборки по всем конвейерам. Мы обнаружили, что установка параметра refspec во время git fetch ускоряет шаг клонирования в 100 раз. Группа Engineering Productivity отвечает за поддержку инженеров, которые создают и развёртывают программное обеспечение в Pinterest. Наша команда поддерживает ряд инфраструктурных сервисов и часто работает над крупными проектами — перенос всего программного обеспечения на Bazel, создание платформы непрерывной доставки под названием Hermez. Они же поддерживают монорепозитории, куда ежедневно присылают по несколько сотен коммитов, и это ещё не все их задачи. Мы направляем большие усилия на то, чтобы разработка и доставка программного обеспечения в Pinterest происходили быстро и безболезненно. Недавно жизнь ещё раз показала, какое большое влияние может оказать даже самая мелкая деталь. Мы нашли такую маленькую деталь в Git, которая значительно сократила время сборки в наших конвейерах непрерывной интеграции. Чтобы понять, как это маленькое изменение оказало такое большое влияние, нужно поделиться некоторой информацией о наших монорепозиториях и конвейерах. Монорепозитории и конвейеры У нас в Pinterest шесть основных репозиториев: Pinboard, Optimus, Cosmos, Magnus, iOS и Android. Всё это монорепозитории с большим наборов сервисов, специфичных для языка. Pinboard — самый крупный монорепозиторий, который поддерживается с момента основания компании. В нём более 350 тыс. коммитов и размер 20 ГБ при полном клонировании. Клонирование монорепозитория с большим объёмом кода и длительной историей занимает много времени, а в наших конвейерах непрерывной интеграции приходится делать это очень часто в течение дня. Для одного только Pinboard в рабочие дни мы делаем больше 60 тыс. git pull. Большинство скриптов конфигурации конвейера Jenkins (написанных на Groovy) начинаются с этапа Checkout, где мы клонируем репозиторий, который на более поздних этапах будет построен и протестирован. Вот как выглядит типичная стадия Checkout: Если использовать Git CLI напрямую: ``` Даже при неполном/поверхностном (shallow) клонировании, не извлекая никаких тегов и только для последних 50 коммитов, операция всё равно выполнялась не так быстро, как могла бы. Всё потому, что мы не устанавливали параметр refspec. Обратите внимание, что отсутствие этого параметра означает команду на извлечение всех refspec'ов: +refs/heads/*:refs/remotes/origin/*. В случае с Pinboard происходит обработка более 2500 ветвей. Просто добавив опцию refspec и указав, какие ссылки нас интересуют (в нашем случае только из мастера), можно ограничить область обработки нужной ветвью и сэкономить много времени. Вот как это выглядит в нашем конвейере: Простое изменение одной строки сократило время клонирования в 100 раз и в результате значительно сократило время сборки. Время клонирования крупнейшего репозитория Pinboard сократилось с 40 минут до 30 секунд. Это показывает, что иногда даже самые маленькие усилия имеют очень большое значение. =========== Источник: habr.com =========== =========== Автор оригинала: Urvashi Reddy, Adam Berry, Rui Li ===========Похожие новости:
Высокая производительность ), #_git, #_upravlenie_razrabotkoj ( Управление разработкой ), #_upravlenie_produktom ( Управление продуктом ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:49
Часовой пояс: UTC + 5