Ответ
Blue-Green Deployment — это стратегия непрерывного развёртывания, направленная на исключение простоя (downtime) и минимизацию рисков при обновлении приложения. Суть заключается в поддержании двух идентичных производственных сред:
- Blue (Синяя): Текущая активная версия приложения, обслуживающая весь пользовательский трафик.
- Green (Зелёная): Новая версия приложения, развёрнутая параллельно в изоляции.
Типичный процесс для Node.js-приложения:
- Развернуть новую версию приложения в среде Green (например, на другом наборе серверов или в новых контейнерах).
- Провести все необходимые тесты (интеграционные, нагрузочные) на среде Green.
- После успешного тестирования перенаправить весь входящий трафик с окружения Blue на Green. Это делается мгновенно, обновляя конфигурацию балансировщика нагрузки (Nginx, AWS ALB, Kubernetes Ingress).
- Среда Blue остаётся «на подхвате» для мгновенного отката в случае проблем.
Пример конфигурации маршрутизации в Nginx:
# Исходное состояние: трафик идёт на Blue
upstream backend {
server blue-app-1:3000;
server blue-app-2:3000;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
# После переключения: трафик идёт на Green
upstream backend {
server green-app-1:3000;
server green-app-2:3000;
}
Преимущества:
- Нулевой downtime: Переключение трафика происходит мгновенно.
- Быстрый и безопасный откат: При обнаружении критической ошибки в Green можно моментально вернуть трафик на проверенную Blue.
- Упрощённое тестирование: Новая версия тестируется в реальной производственной среде, но без нагрузки.
Сложности:
- Удвоение ресурсов: Требует поддержки двух полноценных сред.
- Миграция состояния: Необходимо обеспечить согласованность данных (сессии, кэш, загрузки файлов) между средами или использовать общие для них сервисы (внешняя БД, Redis, S3).