Skip to content
EN

Blue-Green deployment

Коротко:

Blue-Green deployment — strategy с двумя identical production environments: Blue (current live) и Green (new version). Load balancer switches traffic 100% на Green для deploy, revert мгновенно если что-то сломалось. Plus: zero downtime, instant rollback. Minus: double infrastructure cost во время deploy, DB schema migrations сложны (обе versions должны работать на одной DB).

Ниже: подробности, пример, смежные термины, FAQ.

Проверить свой сайт →

Подробности

  • Blue = production, Green = idle replica
  • Deploy new version на Green
  • Smoke tests на Green через internal URL
  • DNS/LB switch: Green now live, Blue idle
  • Rollback = switch back в Blue (instant)

Пример

# nginx load balancer switch
upstream backend {
  server 10.0.0.1:8080;  # Blue
  # server 10.0.0.2:8080;  # Green (commented until deploy)
}
# After deploy: swap comments, nginx -s reload

Смежные термины

Преимущества и недостатки Blue-Green deployment

Blue-Green deployment предлагает несколько ключевых преимуществ:

  • Нулевое время простоя (Zero Downtime): переключение трафика на новую версию (Green) происходит без прерывания работы приложения, что обеспечивает непрерывность сервиса.
  • Мгновенный откат (Instant Rollback): в случае возникновения проблем на новой версии, трафик можно мгновенно вернуть на текущую версию (Blue), минимизируя время простоя.
  • Улучшенная надёжность: стратегия позволяет быстро реагировать на ошибки и сбои, обеспечивая стабильность работы приложения.

Однако у Blue-Green deployment есть и недостатки:

  • Двойные затраты на инфраструктуру: во время деплоя требуется поддерживать две рабочие среды, что увеличивает затраты на ресурсы.
  • Сложность миграций схем баз данных: при изменении структуры базы данных необходимо обеспечить совместимость обеих версий приложения с единой схемой БД.

Практическое применение Blue-Green deployment

Blue-Green deployment широко используется в различных сценариях:

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

Для реализации Blue-Green deployment можно использовать следующие инструменты:

  • Load balancer: для переключения трафика между версиями приложения.
  • CI/CD инструменты: для автоматизации процесса деплоя и управления версиями.
  • Инструменты мониторинга: для отслеживания состояния приложения и определения необходимости отката.

Сравнение с другими стратегиями деплоя

Blue-Green deployment отличается от других стратегий деплоя, таких как Canary deployments и Rolling deployments:

  • Canary deployments позволяют постепенно внедрять новую версию приложения, отправляя трафик на небольшую группу пользователей. Это позволяет минимизировать риски при внедрении изменений. Однако Canary deployments не всегда обеспечивают мгновенный откат, как в случае с Blue-Green deployment.
  • Rolling deployments обновляют приложение постепенно, заменяя старые экземпляры новыми. Это позволяет минимизировать время простоя, но не всегда обеспечивает мгновенный откат. Кроме того, Rolling deployments могут потребовать дополнительных усилий для балансировки нагрузки.

Blue-Green deployment обеспечивает более высокий уровень надёжности и контроля, но требует дополнительных затрат на инфраструктуру и более сложной настройки. Выбор стратегии деплоя зависит от конкретных требований и целей проекта.

Больше по теме

Часто задаваемые вопросы

Blue-green vs rolling?

Rolling: update pods одна по одной (K8s default). Blue-green: 2 full envs + swap. Blue-green safer для stateful, rolling простой для stateless.

Стоимость double infrastructure — worth it?

Во время deploy — yes (часы). Нет необходимости держать постоянно — create Green at deploy time, destroy after success.

DB migrations — как?

Schema должна быть backwards-compatible (не drop columns, не rename). Forward-compatible: add nullable columns, defaults.

Запустить инструмент, который описан в этой статье

Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.