Стратегии раскатки приложения

Написать код — это полдела. Главное — доставить его миллионам пользователей так, чтобы никто не заметил даунтайма (простоя). Rolling Release (постепенное обновление подов) мы разбирали в первых неделях. Давай посмотрим на более продвинутые подходы.

1. Blue/Green Deployment

Суть: У тебя есть две полностью идентичные production-среды. «Blue» (текущая, рабочая версия) и «Green» (новая версия, на которую пока нет трафика). Ты разворачиваешь код в Green, прогоняешь тесты, и когда всё готово — просто переключаешь балансировщик (Load Balancer) с Blue на Green.

  • Плюсы: Мгновенное переключение (Zero Downtime). Идеальный и самый быстрый откат (Rollback) — если Green упал, просто переключи балансировщик обратно на Blue за 1 секунду.
  • Минусы: Дорого. Нужно держать х2 серверов на момент выкатки. Сложно применять, если новая версия требует жестких миграций в базе данных (база-то общая).
2. Canary Release (Канареечный релиз)

Суть: Выкатываешь новую версию только на часть трафика (например, 5%), а остальные 95% сидят на старой. Сидишь и смотришь на метрики и логи (не выросли ли 500-е ошибки?). Если всё ок — постепенно увеличиваешь процент (10% -> 50% -> 100%).

  • Плюсы: Минимизация радиуса поражения. Если версия с критическим багом, пострадает только 5% пользователей, а не все.
  • Минусы: Требует умного балансировщика (Service Mesh, Nginx, Envoy) и продвинутой системы метрик, чтобы автоматически откатить релиз при всплеске ошибок.
Другие продвинутые подходы
  1. A/B Testing: Похоже на Canary, но фокус не на багах, а на бизнесе. Выкатываем новую кнопку на 10% аудитории и замеряем конверсию. Выигрывает та версия, которая приносит больше денег.
  2. Shadow Release (Теневой трафик): Копия реальных запросов пользователей отправляется на новую (скрытую) версию сервиса. Пользователь получает ответ от старой версии, а мы в фоне смотрим, не упала ли новая версия под реальной нагрузкой (нагрузочное тестирование на бою).
  3. Feature Toggling (Флаги): Код выкатывается выключенным (завернут в if feature_flag_enabled:). Фичу можно включить мгновенно через админку, даже не делая редеплой сервиса.
Что выбрать?
Стратегия Риск Для чего идеально подходит?
Recreate (Убил старое -> Поднял новое) Высокий Dev/Test среды. Когда даунтайм не критичен.
Rolling Средний Дефолтный вариант в K8s. Плавное обновление без простоев.
Blue / Green Низкий Критичные системы, где нужен откат за 1 секунду (финтех).
Canary Минимальный Агрессивная выкатка новых фич на реальных пользователей с авто-откатом.
Полезные ресурсы
  • Rapid Release at Massive Scale (Meta). Как выкатывать код на миллиарды пользователей дважды в день и не ломать Facebook?
  • Deployment Best Practices (Netflix). Netflix — пионеры микросервисов и создатели Spinnaker (популярнейшей тулзы для деплоя). Разбираем их подход к Canary релизам и Chaos Engineering.