Прямой ответ
Blue‑green deploy использует два окружения, поэтому переключение на новую версию выполняется мгновенно, а откат — без затрагивания пользователей.
| Критерий | Blue-green | Canary | Rolling update |
|---|---|---|---|
| Окружения | Два | Одно | Одно |
| Переключение | Мгновенное | Постепенное | Постепенное |
| Откат | Мгновенный | Быстрый | Медленный |
| Ресурсы | Двойные | Обычные | Обычные |
upstream app {
server blue:8080;
# server green:8080; # переключение
}
Два окружения позволяют переключиться мгновенно, поэтому откат выполняется без затрагивания пользователей. О canary стратегии — в статье про canary deploy.
Окружения, переключение и откат
Два окружения позволяют переключиться на новую версию мгновенно, поэтому откат выполняется без затрагивания пользователей.
Два окружения. Старая и новая версии развёрнуты одновременно, поэтому переключение выполняется изменением маршрутизации.
Мгновенное переключение. Переключение на новую версию выполняется изменением маршрутизации, поэтому переход занимает секунды.
Мгновенный откат. Возврат к старой версии выполняется изменением маршрутизации, поэтому откат не затрагивает пользователей.
Практическое следствие: двойные ресурсы требуются для одновременного развёртывания двух версий, поэтому стоимость инфраструктуры увеличивается.
Отдельный аспект — сравнение с canary. Canary развёртывает новую версию на части трафика, поэтому деградация обнаруживается до полного перехода, но откат занимает больше времени.
Три признака некорректного blue‑green deploy.
Отсутствие мгновенного переключения. Переключение занимает время, поэтому пользователи затрагиваются.
Отсутствие мгновенного отката. Возврат к старой версии занимает время, поэтому сбой не устраняется быстро.
Отсутствие двойных ресурсов. Одновременное развёртывание двух версий невозможно, поэтому переключение не выполняется.
О rolling update — в статье про rolling update; об откате релиза — в статье про rollback deploy.
Мгновенное переключение и сравнение стратегий
Два окружения позволяют переключиться на новую версию мгновенно, поэтому откат выполняется без затрагивания пользователей.
Мгновенное переключение. Переключение выполняется изменением маршрутизации, поэтому переход занимает секунды.
Мгновенный откат. Возврат к старой версии выполняется изменением маршрутизации, поэтому откат не затрагивает пользователей.
Сравнение с canary. Canary развёртывает новую версию на части трафика, поэтому деградация обнаруживается до полного перехода, но откат занимает больше времени.
Практическое следствие: двойные ресурсы требуются для одновременного развёртывания двух версий, поэтому стоимость инфраструктуры увеличивается.
Практика: настройка blue-green deploy
1. Разворачивайте два окружения одновременно. Старая и новая версии развёрнуты, поэтому переключение выполняется мгновенно.
2. Настройте мгновенное переключение. Переключение выполняется изменением маршрутизации, поэтому переход занимает секунды.
3. Настройте мгновенный откат. Возврат к старой версии выполняется изменением маршрутизации, поэтому откат не затрагивает пользователей.
4. Проверяйте новую версию до переключения. Метрики новой версии проверяются до переключения, поэтому деградация обнаруживается.
5. Фиксируйте переключение в логе. Запись переключения позволяет определить, когда и кем было выполнено переключение.
6. Разделяйте версии по признакам. Признаки позволяют определить, какая версия обрабатывает запрос.
7. Проверяйте откат после переключения. После переключения откат проверяется, поэтому возврат выполняется быстро.
Рекомендации:
- Не используйте blue‑green при ограниченных ресурсах. Двойные ресурсы требуются для одновременного развёртывания, поэтому стоимость увеличивается.
- Учитывайте мгновенность переключения. Переключение выполняется изменением маршрутизации, поэтому переход занимает секунды.
- Сопоставляйте откат с переключением. Возврат к старой версии выполняется изменением маршрутизации, поэтому откат не затрагивает пользователей.
- Фиксируйте переключение в ошибке. Признак в записи ошибки позволяет определить, когда было выполнено переключение.
- Пересматриваем стратегию при изменении нагрузки. Рост числа пользователей требует изменения стратегии развёртывания.
Практический сценарий: переключение заняло время
Контекст: переключение на новую версию заняло время, поэтому пользователи испытали деградацию.
- Диагностика. Проверка показала, что переключение выполнялось перезапуском экземпляров вместо изменения маршрутизации. Переключение заняло время, поэтому пользователи испытали деградацию.
- Причина. Мгновенное переключение не было настроено, поэтому переключение выполнялось перезапуском экземпляров.
- Действия. (а) Настроили мгновенное переключение изменением маршрутизации, чтобы переход занимал секунды; (б) настроили мгновенный откат изменением маршрутизации, чтобы возврат не затрагивал пользователей; (в) проверили новую версию до переключения, чтобы деградация обнаруживалась; (г) настроили фиксацию переключения в логе для диагностики; (д) проверили откат после переключения, чтобы возврат выполнялся быстро.
- Результат. Переключение выполняется мгновенно, поэтому пользователи не испытывают деградацию.
Вывод: переключение перезапуском экземпляров занимает время, поэтому пользователи испытывают деградацию. Мгновенное переключение изменением маршрутизации обеспечивает переход за секунды.
Практический сценарий: переключение заняло время
Контекст: переключение на новую версию заняло время, поэтому пользователи испытали деградацию.
- Диагностика. Проверка показала, что переключение выполнялось перезапуском экземпляров вместо изменения маршрутизации. Переключение заняло время, поэтому пользователи испытали деградацию.
- Причина. Мгновенное переключение не было настроено, поэтому переключение выполнялось перезапуском экземпляров.
- Действия. (а) Настроили мгновенное переключение изменением маршрутизации, чтобы переход занимал секунды; (б) настроили мгновенный откат изменением маршрутизации, чтобы возврат не затрагивал пользователей; (в) проверили новую версию до переключения, чтобы деградация обнаруживалась; (г) настроили фиксацию переключения в логе для диагностики; (д) проверили откат после переключения, чтобы возврат выполнялся быстро.
- Результат. Переключение выполняется мгновенно, поэтому пользователи не испытывают деградацию.
Вывод: переключение перезапуском экземпляров занимает время, поэтому пользователи испытывают деградацию. Мгновенное переключение изменением маршрутизации обеспечивает переход за секунды.
Практический сценарий: переключение заняло время
Контекст: переключение на новую версию заняло время, поэтому пользователи испытали деградацию.
- Диагностика. Проверка показала, что переключение выполнялось перезапуском экземпляров вместо изменения маршрутизации. Переключение заняло время, поэтому пользователи испытали деградацию.
- Причина. Мгновенное переключение не было настроено, поэтому переключение выполнялось перезапуском экземпляров.
- Действия. (а) Настроили мгновенное переключение изменением маршрутизации, чтобы переход занимал секунды; (б) настроили мгновенный откат изменением маршрутизации, чтобы возврат не затрагивал пользователей; (в) проверили новую версию до переключения, чтобы деградация обнаруживалась; (г) настроили фиксацию переключения в логе для диагностики; (д) проверили откат после переключения, чтобы возврат выполнялся быстро.
- Результат. Переключение выполняется мгновенно, поэтому пользователи не испытывают деградацию.
Вывод: переключение перезапуском экземпляров занимает время, поэтому пользователи испытывают деградацию. Мгновенное переключение изменением маршрутизации обеспечивает переход за секунды.
FAQ
Что такое blue-green deploy? Стратегия развёртывания, при которой два окружения развёрнуты одновременно. Переключение выполняется изменением маршрутизации, поэтому переход занимает секунды.
Как выполняется откат? Возврат к старой версии выполняется изменением маршрутизации, поэтому откат не затрагивает пользователей.
Чем blue-green отличается от canary? Blue-green использует два окружения и мгновенное переключение, canary развёртывает новую версию на части трафика. Blue-green требует двойных ресурсов, canary — обычных.
Когда использовать blue-green? При необходимости мгновенного переключения и отката. Двойные ресурсы требуются, поэтому стратегия используется при достаточных ресурсах.
Источники: Kubernetes Deployment, nginx load balancing, Prometheus naming — ссылки в шапке.