Vercel Sandbox: как ускорили восстановление снапшотов с 40 секунд до менее секунды

Vercel Sandbox позволяет разработчикам тестировать и отлаживать код в изолированных контейнерах на базе Firecracker microVM. Недавно команда Vercel реализовала возможность снимать и восстанавливать полное состояние файловой системы песочницы. Первоначально инженеры сосредоточились на надёжности: сис

Vercel Sandbox: как ускорили восстановление снапшотов с 40 секунд до менее секунды

Vercel Sandbox позволяет разработчикам тестировать и отлаживать код в изолированных контейнерах на базе Firecracker microVM. Недавно команда Vercel реализовала возможность снимать и восстанавливать полное состояние файловой системы песочницы. Первоначально инженеры сосредоточились на надёжности: система не должна была терять данные или давать сбои. Но как только базовая функциональность была готова, встал вопрос производительности. Время восстановления снапшота на 75-м перцентиле (p75) превышало 40 секунд — это было неприемлемо для разработчиков, привыкших к мгновенным откликам. После внедрения параллельной загрузки и локального кеширования время удалось сократить до менее одной секунды.

Как работают снапшоты в Vercel Sandbox

Снапшот представляет собой сжатый образ диска песочницы. Когда разработчик вызывает метод sandbox.snapshot(), Vercel сжимает образ диска (файл .img) в формат .vhs и загружает его в S3. При восстановлении через sandbox.create() происходит обратный процесс: скачивание .vhs из S3 и декомпрессия обратно в .img. Без сжатия каждый снапшот передавал бы сотни мегабайт или гигабайты по сети, добавляя секунды и десятки секунд к каждой операции восстановления.

Почему восстановление снапшота занимало так много времени?

Изначально процесс восстановления был строго последовательным. Vercel скачивала весь файл .vhs из S3 одним запросом, дожидалась завершения, а затем декомпрессировала его в одном потоке. Учитывая, что снапшоты весят от 200 МБ до нескольких гигабайт, одна только загрузка могла занимать от нескольких секунд до десятков секунд. Это было узким местом.

Оптимизация: параллельная загрузка и декомпрессия

Чтобы ускорить загрузку, инженеры Vercel использовали HTTP-заголовок Range для скачивания файла по частям. AWS Go SDK предоставляет API transfermanager, который автоматически управляет параллельными запросами. После тестирования различных уровней конкурентности и размеров чанков удалось добиться ускорения загрузки в 2–5 раз.

Аналогичный подход применили и к декомпрессии. Формат .vhs хранит заголовок и фрейм для каждой выделенной области дискового образа. Вместо того чтобы декодировать и декомпрессировать фреймы один за другим, Vercel перешла на схему с одним декодером, который передаёт данные N горутинам для параллельной декомпрессии. Это ускорило преобразование .vhs обратно в .img в 2–4 раза в зависимости от размера снапшота.

Комбинация даёт результат менее секунды

Объединив параллельную загрузку, многопоточную декомпрессию и локальное кеширование (кэш позволяет избежать повторной загрузки часто используемых снапшотов), Vercel снизила p75 время восстановления с 40+ секунд до менее одной секунды. Это кардинально улучшает пользовательский опыт: разработчики могут быстро переключаться между состояниями песочницы, не теряя времени на ожидание.

Кого затронет и как

Оптимизация в первую очередь полезна разработчикам, использующим Vercel Sandbox для тестирования, отладки и воспроизведения ошибок. Теперь они могут мгновенно возвращаться к предыдущему состоянию окружения, что ускоряет цикл разработки. Для команд, работающих над сложными проектами с большими файловыми системами, сокращение времени восстановления с десятков секунд до долей секунды означает существенный прирост продуктивности. Также улучшение косвенно влияет на стоимость: меньше времени простоя контейнеров и меньше затрат на вычислительные ресурсы.

Что будет дальше

Vercel продолжит оптимизировать Sandbox, фокусируясь на других аспектах производительности, таких как время создания песочницы и скорость выполнения команд. В планах — дальнейшее улучшение механизма кеширования и, возможно, внедрение дельта-снапшотов, чтобы сохранять только изменения, а не полный образ диска. Это позволит ещё больше ускорить операции и снизить объём передаваемых данных.

Итог

Оптимизация снапшотов в Vercel Sandbox — наглядный пример того, как инженерная работа над узкими местами может кардинально улучшить пользовательский опыт. Снижение времени восстановления с 40+ секунд до менее одной секунды делает инструмент по-настоящему отзывчивым и удобным. Разработчикам стоит следить за обновлениями Vercel: дальнейшие улучшения обещают сделать работу с песочницами ещё быстрее и эффективнее.