Короткий ответ
Нет универсально «самой дешёвой» стратегии — rolling дешевле по ресурсам (не требует дублирования всей ёмкости), blue-green обычно требует кратковременного удвоения инфраструктуры на время релиза, а canary занимает промежуточное положение (небольшой избыточный набор подов на время анализа); решение о стратегии по умолчанию должно опираться на профиль риска и критичность большинства сервисов, оставляя явные исключения (canary/blue-green) для сервисов с высокой ценой ошибки, а не применяя самую дорогую стратегию ко всем 200+ сервисам без разбора.
Как это работает подробнее
стоимость стратегии складывается не только из compute-ресурсов на время релиза, но и из операционной сложности — canary требует зрелой системы метрик и, как правило, выделенного progressive-delivery контроллера (Argo Rollouts/Flagger), blue-green требует инфраструктуры, способной держать два полных окружения (включая стоимость лицензий, if any, и сетевой конфигурации), rolling почти не добавляет накладных расходов сверх небольшого `maxSurge`.
Пример кода
Классификация для обсуждения (пример, не универсальное правило):
Tier 1 (customer-facing, high revenue impact): canary + автоматический анализ метрик
Tier 2 (internal API, средний трафик): rolling с health-gate перед продвижением
Tier 3 (batch/внутренние низкорисковые сервисы): rolling, минимальный gate
Оценить: при 200 сервисах, из которых 20 Tier 1, 60 Tier 2 и 120 Tier 3,
как распределить platform-инвестиции в progressive delivery tooling?Сравнение
- Компромисс. сегментированная политика (разные стратегии для разных классов сервисов) точнее отражает реальный риск, но увеличивает сложность платформы — нужно поддерживать несколько путей деплоя одновременно; единая политика для всех проще в поддержке, но либо переплачивает за избыточную защиту простых сервисов, либо недостаточно защищает критичные. Явный критерий классификации сервисов (трафик, выручка, SLA) должен обсуждаться с владельцами продукта, а не определяться платформенной командой в одиночку.
Что использовать на практике
- На практике. при 200+ сервисах разумно сегментировать политику по критичности — например, rolling по умолчанию для внутренних low-risk сервисов, canary обязателен для customer-facing high-traffic сервисов, blue-green — для сервисов, где миграции/совместимость делают постепенную замену версий особенно рискованной (или где требуется мгновенный откат по бизнес-причинам). Важно считать не только прямую стоимость инфраструктуры, но и стоимость инцидентов, которые более дешёвая стратегия не успевает поймать вовремя.
- Пример. Ожидаемый ответ: обсуждение приоритизации инвестиций именно в Tier 1 (где цена ошибки выше инфраструктурных затрат на canary), а не равномерного внедрения дорогой стратегии везде.
Подводные камни
- Частые ошибки. вводят одну стратегию «для всех сервисов для единообразия», игнорируя разницу в критичности и трафике; считают только явную стоимость облачных ресурсов, не учитывая стоимость времени инженеров на поддержку более сложной инфраструктуры (progressive delivery controllers, дополнительный мониторинг).