Стратегии выката: blue-green, canary, rolling
Как катить новую версию без даунтайма и с возможностью отката: rolling, blue-green и canary, их плюсы и риски.
Проблема простого выката
Самый наивный деплой: остановить старую версию, выкатить новую. Между этим сервис лежит, и если новая версия сломана, пользователи получают ошибку, а откат — ещё один такой же простой деплой. На проде так не катят.
Три стратегии решают это по-разному: rolling, blue-green, canary.
Rolling
Rolling update заменяет копии приложения по очереди. Есть, скажем, четыре копии. Гасим одну, поднимаем на новой версии, ждём, что она здорова, переходим к следующей. Старая и новая версии какое-то время работают вместе.
Плюс: даунтайма нет, не нужно держать двойной запас серверов. Минус: во время выката в проде живут обе версии сразу, поэтому они должны быть совместимы (особенно по схеме базы). Откат — такой же постепенный rolling назад. Это стратегия по умолчанию в Kubernetes.
Blue-green
Blue-green держит два полных окружения. Blue обслуживает прод, green стоит рядом с новой версией. Когда green проверен, балансировщик переключает весь трафик на него одним движением.
Плюс: переключение мгновенное, откат тоже мгновенный (вернуть трафик на blue). Минус: нужно держать два полных окружения, то есть двойные ресурсы на время выката. Хорошо для релизов, где важен мгновенный откат.
Canary
Canary (канарейка) выкатывает новую версию сначала на маленькую долю трафика. Скажем, 5% пользователей идут на v2, остальные на v1. Смотришь метрики и ошибки. Всё хорошо, увеличиваешь долю: 25%, 50%, 100%. Что-то пошло не так, откатываешь, и проблему увидели только 5% пользователей.
Плюс: проблему ловят на малой доле, риск минимальный. Минус: нужен балансировщик с разделением трафика и хорошие метрики, чтобы понять, здорова ли канарейка. Название от шахтёрских канареек, которые предупреждали об опасном газе раньше людей.
Что выбирать
- Нет лишних ресурсов, версии совместимы, нужен простой выкат без даунтайма: rolling.
- Важен мгновенный откат и есть ресурсы на второе окружение: blue-green.
- Высокий риск, есть метрики и управляемый трафик: canary.
Любая из трёх требует, чтобы приложение умело корректно завершаться при замене и сообщать о своей готовности. Это темы следующих уроков про graceful shutdown и health-эндпоинты.
Что важно запомнить
Rolling меняет копии по очереди без даунтайма и двойных ресурсов, но обе версии какое-то время работают вместе и должны быть совместимы.
Blue-green держит два окружения и переключает трафик целиком: мгновенный выкат и откат ценой двойных ресурсов.
Canary пускает на новую версию малую долю трафика и растит её по метрикам, ограничивая радиус проблемы. Для всех трёх нужен корректный откат.
В следующем уроке разберём остальные паттерны пайплайна: gates, ручные подтверждения и параллельные ветки.
Прошли материал до конца? Отметьте урок пройденным.
Прогресс сохранён в этом браузере
Почистишь историю или откроешь с телефона, и отметки пропадут. Оставь почту, они переедут в аккаунт. Пароль придумывать не нужно.
Готово. теперь в аккаунте: прогресс виден с любого устройства. Мой прогресс