← CI/CD: паттерны
12 мин · средне · Урок 2 из 5

Стратегии выката: blue-green, canary, rolling

Как катить новую версию без даунтайма и с возможностью отката: rolling, blue-green и canary, их плюсы и риски.

Проблема простого выката

Самый наивный деплой: остановить старую версию, выкатить новую. Между этим сервис лежит, и если новая версия сломана, пользователи получают ошибку, а откат — ещё один такой же простой деплой. На проде так не катят.

Три стратегии решают это по-разному: rolling, blue-green, canary.

Rolling

Rolling update заменяет копии приложения по очереди. Есть, скажем, четыре копии. Гасим одну, поднимаем на новой версии, ждём, что она здорова, переходим к следующей. Старая и новая версии какое-то время работают вместе.

гасим копию, поднимаем на новой версии, ждём готовности, берём следующую v1копия 1v2копия 1 v1копия 2v2копия 2 v1копия 3v2копия 3 v1копия 4v2копия 4 во время выката в проде живут обе версии сразу
Копии меняются по очереди: даунтайма нет, но обе версии какое-то время отвечают на запросы вместе.

Плюс: даунтайма нет, не нужно держать двойной запас серверов. Минус: во время выката в проде живут обе версии сразу, поэтому они должны быть совместимы (особенно по схеме базы). Откат — такой же постепенный rolling назад. Это стратегия по умолчанию в Kubernetes.

Blue-green

Blue-green держит два полных окружения. Blue обслуживает прод, green стоит рядом с новой версией. Когда green проверен, балансировщик переключает весь трафик на него одним движением.

трафикбалансировщик bluev1 · прод greenv2 · новая два полныхокружения,трафик на одном
Green стоит рядом с новой версией и не видит трафика, пока балансировщик не переведёт его целиком.

Плюс: переключение мгновенное, откат тоже мгновенный (вернуть трафик на blue). Минус: нужно держать два полных окружения, то есть двойные ресурсы на время выката. Хорошо для релизов, где важен мгновенный откат.

Canary

Canary (канарейка) выкатывает новую версию сначала на маленькую долю трафика. Скажем, 5% пользователей идут на v2, остальные на v1. Смотришь метрики и ошибки. Всё хорошо, увеличиваешь долю: 25%, 50%, 100%. Что-то пошло не так, откатываешь, и проблему увидели только 5% пользователей.

трафикделим по долям v1 · стабильная v2 · канарейка доля трафика на v2 5% 25% 100% долю растят, пока метрики чистые
Проблему на канарейке видит только малая доля пользователей; дальше долю растят по метрикам.

Плюс: проблему ловят на малой доле, риск минимальный. Минус: нужен балансировщик с разделением трафика и хорошие метрики, чтобы понять, здорова ли канарейка. Название от шахтёрских канареек, которые предупреждали об опасном газе раньше людей.

Что выбирать

Любая из трёх требует, чтобы приложение умело корректно завершаться при замене и сообщать о своей готовности. Это темы следующих уроков про graceful shutdown и health-эндпоинты.

Что важно запомнить

Rolling меняет копии по очереди без даунтайма и двойных ресурсов, но обе версии какое-то время работают вместе и должны быть совместимы.

Blue-green держит два окружения и переключает трафик целиком: мгновенный выкат и откат ценой двойных ресурсов.

Canary пускает на новую версию малую долю трафика и растит её по метрикам, ограничивая радиус проблемы. Для всех трёх нужен корректный откат.

В следующем уроке разберём остальные паттерны пайплайна: gates, ручные подтверждения и параллельные ветки.

Прошли материал до конца? Отметьте урок пройденным.