Деплой — это процесс развертывания веб-приложения или сайта в рабочей среде: на гостевом хостинге или сервере. Разбираемся, какие есть способы деплоя, в чем их преимущества и недостатки, а также какой из них выбрать в разных ситуациях.
- Повторное создание
- Последовательное развертывание
- Сине-зеленый деплой
- Канареечный релиз
- A/B-тестирование
- Скрытое развертывание
- Какую из стратегий деплоя использовать
Если вы еще не знаете, что такое деплой и как его проводить, сначала прочитайте наш гайд, а потом возвращайтесь к статье.
Повторное создание
Способ, при котором разработчик сначала отключает старую версию приложения (V1 на картинке), а затем развертывает новую версию (V2 на картинке). При этом в работе приложения возникает перерыв, длительность которого зависит от скорости отключения и повторного запуска.
Преимущества:
- Простота
- Состояние приложения полностью обновляется.
Недостатки:
- Пользователь не может использовать сервис во время простоя, длительность которого зависит от скорости проведения работ.
Последовательное развертывание
Разработчики постепенно заменяют экземпляры текущей версии приложения на экземпляры новой версии. Процедура выглядит следующим образом: балансировщик нагрузки распределяет трафик между серверами в пуле экземпляров версии V1. Потом развертывается один экземпляр версии V2. Когда новый экземпляр готов принимать трафик (пользователей, которые заходят в приложение), его включают в пул. Затем удаляют и отключают один экземпляр версии V1.
Чтобы увеличить время развертывания, можно изменять эти максимальные значения:
- Количество экземпляров, которые развертываются одновременно
- Увеличение количества экземпляров во время деплоя
- Количество экземпляров, недоступных во время последовательного развертывания.
Преимущества:
- Простота
- Экземпляры приложения заменяются постепенно
- Удобно перераспределять данные приложений, сохраняющих информацию о запросах.
Недостатки:
- Развертывание и откат к предыдущей версии занимают много времени
- Сложно реализовать поддержку нескольких API
- Отсутствует контроль за трафиком.
Освойте DevOps на интенсиве Хекслета Научитесь автоматизировать окружение, деплоить приложения одной кнопкой одновременно на любое количество машин и разворачивать облачный кластер на Digital Ocean или Yandex Cloud.
Сине-зеленый деплой
Сине-зеленый деплой означает, что синяя версия V2 развертывается параллельно зеленой версии V1 с одинаковым количеством экземпляров. Убедившись, что новая версия работает исправно, разработчики перенаправляют трафик от версии V1 к версии V2 с помощью балансировщика нагрузки.
Преимущества:
- Моментальное развертывание и откат
- Так как приложение развертывается целиком, не возникают проблемы из-за одновременного использования двух версий.
Недостатки:
- Высокая стоимость, так как для такого деплоя требуется вдвое больше ресурсов
- Перед развертыванием нужно тщательно протестировать платформу
- Сложно работать с приложениями, сохраняющими данные о запросах.
Канареечный релиз
Канареечный релиз позволяет постепенно перенаправить трафик от версии V1 к версии V2. Обычно трафик распределяется пропорционально: например, 90% запросов отправляется версии V1, а 10% — версии V2.
Этот метод используется, если тестов не хватает, или они не дают надежные результаты. Еще он подходит, когда разработчики не уверены в стабильности новой версии.
Преимущества:
- Версия доступна части пользователей
- Удобно отслеживать коэффициент ошибок и работу новой версии
- Быстрый откат.
Недостатки:
- Медленное развертывание.
A/B-тестирование
Пользователи, которые отвечают заранее определенным условиям, получают доступ к новым функциям. Этот метод похож на стратегию канареечного релиза, но отличается целями. A/B-тестирование — это не только стратегия деплоя, но и способ принятия бизнес-решений на основании статистики. Часто этот способ используется, чтобы оценить эффект изменения и определить, какая версия больше нравится пользователям.
Трафик может распределяться на основании следующих условий:
- Настройки файлов cookie
- Параметры запросов
- Геолокация
- Браузер, размер экрана, ОС и другие технические характеристики
- Язык.
Преимущества:
- Параллельная работа нескольких версий
- Полный контроль над распределением трафика.
Недостатки:
- Требуется умный балансировщик нагрузки
- Сложно устранять проблемы для конкретного сеанса
- Требуется трассировка распределенных систем.
Читайте также: Для чего программисту вообще использовать DevOps
Скрытое развертывание
Версия V2 развертывается параллельно версии V1. Она тоже получает входящие запросы, но не влияет на реальный трафик. Так можно протестировать нагрузку новой функции. Полный переход на новую версию происходит, когда приложение работает стабильно и отвечает требованиям.
Это сложная стратегия с дополнительными требованиями, которая использует исходящий трафик. Иногда из-за этого возникают ошибки: например, если интернет-магазин проводит скрытое тестирование платежного сервиса, клиент может случайно оплатить заказ дважды. Чтобы этого избежать, придется создать сервис, который имитирует ответ поставщика услуг.
Преимущества:
- Работа приложения проверяется на основе реального трафика
- Пользователь не теряет доступ к приложению
- Приложение развертывается только тогда, когда оно отвечает всем требованиям заказчика.
Недостатки:
- Высокая стоимость, так как требуется вдвое больше ресурсов
- Результаты могут вводить в заблуждение, поскольку полноценный пользовательский тест не проводится
- Сложность организации
- В некоторых случаях требуется сервис для имитации услуг.
Какую из стратегий деплоя использовать
Выбор стратегии деплоя зависит от потребностей и бюджета. Например, для развертывания на этапе разработки или в промежуточной среде подходит повторное создание или последовательный деплой. Для выпуска готовой версии приложения используется последовательное или сине-зеленое развертывание, но только после проведенного тщательного тестирования.
Сине-зеленое развертывание и скрытый деплой стоят дороже, так как требуют вдвое больше ресурсов. Если тестирование не проводится в нужном объеме, или есть сомнения в отношении функционирования и стабильности приложения, подойдет канареечный релиз, A/B-тестирование или скрытое развертывание. Чтобы протестировать новую функцию на группе пользователей, можно применить фильтр, используя такие параметры, как геолокация, язык, ОС или настройки браузера. Для этого применяют A/B-тестирование.
Скрытое развертывание — сложная и трудоемкая стратегия. Если приложение работает с внешними зависимостями и отправляет выходной трафик почтовым сервисам, банкам или другим партнерам, такие действия требуется имитировать. Однако эта стратегия полезна при переходе на новую базу данных и использовании теневого трафика для мониторинга работы под нагрузкой.
Эта статья — адаптированный перевод материала разработчика Этьена Тремеля, опубликованного в блоге The New Stack.
Читайте также: Среды разработки: какие они бывают и чем отличаются друг от друга