← Назад в словарь

Blue/Green deployment

Blue/Green deployment — развёртывание в двух средах

TL;DR

Blue/Green deployment — стратегия развёртывания с двумя идентичными средами (blue и green), где трафик в каждый момент времени идёт только в одну из них. Позволяет выпускать новые версии с мгновенным откатом и минимальным downtime.

Краткое определение

Blue/Green deployment — подход к развёртыванию, при котором существуют две идентичные среды: в одной работает текущая версия (blue), другая используется для развёртывания новой версии (green). После проверки трафик переключается на green, а blue остаётся резервом для быстрого отката.

Оригинал и перевод

  • Язык: английский
  • Оригинал: Blue/Green deployment
  • Буквальный перевод: сине-зелёное развёртывание
  • Русские аналоги: сине-зелёный деплой, развёртывание в двух средах

Синонимы и варианты написания

  • Blue-green
  • A/B deployment (не путать с A/B тестированием)
  • Zero-downtime deployment (частично)
  • Red/Black deployment (в AWS Terminology)

Как работает Blue/Green

                    ┌─────────────────┐
                    │  Load Balancer  │
                    │   (Nginx/ALB)   │
                    └────────┬────────┘
                             │
            ┌────────────────┼────────────────┐
            │                │                │
            ▼                │                ▼
    ┌───────────────┐        │        ┌───────────────┐
    │   BLUE        │        │        │    GREEN      │
    │   (v1.0)      │        │        │    (v1.1)     │
    │   ● Active    │        │        │    ○ Standby  │
    │               │        │        │               │
    │   Запущена    │        │        │   Развёрнута  │
    │   старая      │        │        │   новая       │
    │   версия      │        │        │   версия      │
    └───────────────┘        │        └───────────────┘
            │                │                │
            └────────────────┼────────────────┘
                             │
                    ┌────────▼────────┐
                    │   База данных   │
                    │   (общая для    │
                    │   обеих сред)   │
                    └─────────────────┘

Этапы Blue/Green деплоя

Шаг 1: Есть работающая среда (BLUE)

Traffic → BLUE (v1.0) ✅
          GREEN (пусто)

Шаг 2: Развёртываем новую версию на GREEN

Traffic → BLUE (v1.0) ✅
          GREEN (v1.1) 🔄 деплой

Шаг 3: Тестируем GREEN

Traffic → BLUE (v1.0) ✅
          GREEN (v1.1) ✅ тесты OK

Шаг 4: Переключаем трафик на GREEN

Traffic → BLUE (v1.0) ○ standby
          GREEN (v1.1) ✅ active

Шаг 5: Откат (если нужно)

Traffic → BLUE (v1.0) ✅ rollback!
          GREEN (v1.1) ❌ проблемы

Где используется

  • High-availability сервисы — банки, платежи, SaaS
  • CI/CD пайплайны — автоматические деплои
  • Web-приложения — интернет-магазины, порталы
  • API-сервисы — микросервисы, REST/GraphQL API
  • Mobile backend — обновление без простоя

Когда это важно

Blue/Green критичен при следующих требованиях:

  • Zero downtime — нельзя останавливать сервис даже на минуту
  • Быстрый откат — возможность вернуться за секунды
  • Частые релизы — несколько деплоев в день
  • Высокая доступность — SLA 99.9%+
  • Минимизация рисков — тестирование на реальной среде перед переключением

Преимущества и недостатки

✅ Преимущества

  • Мгновенный откат — переключение балансировщика за секунды
  • Zero downtime — пользователи не замечают деплой
  • Тестирование перед переключением — можно проверить green до продакшена
  • Простота понимания — легче, чем canary release
  • Подходит для БД — при обратной совместимости миграций

❌ Недостатки

  • Дороже — нужны 2 полных среды (x2 стоимость инфраструктуры)
  • Сложнее с БД — нужна обратная совместимость миграций
  • Простой ресурсов — blue простаивает после переключения
  • Не для всех изменений — не подходит для изменений в БД без обратной совместимости

Пример реализации на Nginx

Конфигурация upstream

# /etc/nginx/conf.d/upstream.conf

# Переключаемый upstream
upstream backend {
    # Изначально весь трафик на blue
    server blue:8080 weight=100;
    server green:8080 weight=0 backup;
}

server {
    listen 80;
    server_name example.com;
    
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Скрипт переключения (bash)

#!/bin/bash
# switch-to-green.sh

BLUE="blue:8080"
GREEN="green:8080"

echo "Testing GREEN environment..."
# Проверка здоровья green
curl -f http://$GREEN/health || exit 1

echo "Switching traffic to GREEN..."
# Обновляем upstream (через nginx include или API)
cat > /etc/nginx/upstream-weight.conf <<EOF
upstream backend {
    server $BLUE weight=0 backup;
    server $GREEN weight=100;
}
EOF

# Перезагружаем nginx без простоя
nginx -s reload

echo "Traffic switched to GREEN ✅"
echo "BLUE теперь standby для отката"

Docker Compose пример

version: '3.8'

services:
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - blue
      - green

  blue:
    image: myapp:1.0
    environment:
      - VERSION=1.0
    deploy:
      replicas: 3

  green:
    image: myapp:1.1
    environment:
      - VERSION=1.1
    deploy:
      replicas: 3

Blue/Green vs Canary Release

ПараметрBlue/GreenCanary
Среды2 полных среды1 среда, часть трафика
ПереключениеМгновенное (100%)Постепенное (1% → 100%)
ОткатМгновенныйПостепенный
РискВыше (все пользователи сразу)Ниже (тест на части)
СтоимостьВыше (2x инфраструктура)Ниже (доп. контейнеры)
СложностьПрощеСложнее (роутинг трафика)

Типичные ошибки

  • Нет обратной совместимости БД — нельзя откатиться
  • Общие сессии между средами — пользователи разлогиниваются
  • Нет проверки green перед переключением — переключают непротестированное
  • Blue удаляется сразу — некуда откатываться
  • Миграции БД выполняются после деплоя — должны быть до переключения

Аналоги и связанные термины

  • Canary release — постепенное развёртывание на части трафика
  • Rollback — откат к предыдущей версии
  • Feature flag — включение функциональности через конфиг
  • Traffic switching — переключение трафика между средами
  • Zero-downtime deployment — деплой без простоя (общий термин)

Смотри также (статьи на сайте)

Смотри также (сниппеты)

Смотри также (термины)

Мини-FAQ

Можно ли откатиться мгновенно?

Ответ: Да, это главное преимущество Blue/Green. Если не было необратимых миграций БД — переключение балансировщика занимает секунды.

Нужны ли две базы данных?

Ответ: Обычно нет. Обе среды работают с одной БД. Поэтому миграции должны быть обратно совместимыми:

  • ✅ Добавление нового поля (не удалять старое сразу)
  • ✅ Изменение типа данных с поддержкой обоих форматов
  • ❌ Удаление поля, которое использует blue

Как долго держать blue после переключения?

Ответ: Минимум до следующего деплоя (чтобы было куда откатиться). Некоторые держат 1-2 недели, затем удаляют blue для экономии.

Blue/Green подходит для монолитов?

Ответ: Да, даже больше чем для микросервисов. Для микросервисов часто используют Canary release из-за сложности управления множеством сред.