← Журнал · · Разбор
Ускоряем пуллинг образов: eStargz, Nydus, SOCI и zstd
Всем привет! Наконец-то пришло лето и все больше хочется проводить время на природе вдали от ноутбука) Поэтому сейчас посты в канале происходят не часто, но я уже ищу способы это исправить😅
А сейчас хотелось бы с вами поделиться моим небольшим исследованием на тему оптимизации пуллинга и развертывания образов) Как вы помните, ранее я наткнулся на eStargz, где приводились очень классные бенчмарки. И я немного капнул глубже что там вообще есть интересного в containerd.
На самом деле эта тема действительно достойна статьи на тот же хабр, а то и доклада, но пока просто поделюсь полезными ссылками что я обнаружил) В целом все сводится к использованию containerd с разными дополнениями)
Nerdctl (специально для истинных нердов) - аналог докер клиента, который расширяет его функциональность. Как раз этот клиент я использовал для исследования технологий, которые описаны ниже. Ставится не очень сложно, нужно скачать бинарники и положить в /usr/bin.
eStargz - ранее мы с ним уже знакомились - модифицированный формат сжатия gzip, где в качестве архива используется не tar.gz, а star.gz (что означает seeckable). Плюс ленивая загрузка - тянем слои по требованию. Я смог потестировать эту технологию и вот что вышло
- Python3.7 стандартного формата - с момента начала пуллинга до вывода print('hi') прошло 50 секунд
- Python3.7 estargz - тот же эксперимент - прошло 11 секунд. Получается быстрее обычного формата в 5 раз. Но я пробовал на пребилженных общедоступных образах
- Попробовал на своем образе 15+ GB, в итоге спулился он быстро, логи увидел уже спустя 1.5 минуты (в отличие от 6 минут базового образа), но так как слои большие контейнер тормозил и полная инициализация вышла примерно за такое же время как и обычный образ
Nydus (всегда мечтал вам скинуть нюдсы💪) - еще один формат, на официальном сайте можно глянуть бенчи - какая то сказка если честно. Я попробовал Zran формат, по бенчам вышло для образа Node18 27 секунд против 12. Но самое интересное это размер образа. 1GB против 15MB. Пока не нашел причину, нужно смотреть дальше. Свой ML образ не получилось сконвертировать
SOCI 😂😂😂- наверное самое угарное название, но при этом так же хорош как и остальные. Это форк от estargz от Amazon. Проверял на tensorlow gpu образе - 3м 39с против 1м 45с - это конечно блеск, около 2 раз разница. Но также столкнулся с проблемой билда своих образов - нужен специальный реджестри с поддержкой СОСИ индекса.
ZSTD - мой краш💋, потому что это просто новый формат сжатия. Gzip старый формат и Facebook придумали алгоритмы, как все это дело оптимизировать. Билдим образ через buildx с форматом сжатия zstd и вуаля - образ весит в два раза меньше, а экстрактится в два раза быстрее. На моем МЛ образе вышло 2м 30с против 6м. Вот он мой любимчик!
Дальше конечно можно смотреть на шеринговые файловые системы, такие как dragonfly и бороться за секунды аплоудинга, или глянуть снепшотер от aliexpress. Но на данный момент пока не ясно, насколько это нужно. Таким гигантам как фейсбук, алибаба и амазон понятное дело - в их нагрузках это все играет роль. Но на небольших пока такой необходимости нет. Но если понадобится - обязательно вернусь к этому вопросу и опишу вам результаты)