Стратегии деплоя
– забота не только девопсов, но и разработчиков уровня сеньор+. В этом посте обозначу, какие схемы бывают, и в чем их суть.
Все сценарии работают на одну из двух ситуаций:
Ситуация 1: нужно обновить сервисы на проде с версии 1 на версию 2
🌔 Rolling update
Добавляем инстанс с версией 2 и переводим туда часть запросов. Если все ок, понемногу добавляем сервисы с версией 2 и убираем с версией 1
👯 Blue-green
У нас всегда в наличии 2 идентичных продакшн среды. На одной функционирует версия 1 и обрабатывает все запросы, другая простаивает.
▫️ Раскатываем сервисы версии 2 на неактивный стенд
▫️ Переключаем роутер с одного стенда на другой
На практике чаще встречается Rolling update, потому что это дешевле.
Ситуация 2: хотим протестировать фичу в продакшене😇
🎏 AB testing
▫️ Запускаем несколько экземпляров сервиса с новой фичей и направляем туда часть запросов
▫️ Сравниваем метрики старой и новой версии
▫️ Выбираем победителя
▫️ Раскатываем его на всех пользователей
Способ часто используется для изменений на фронте.
🐤 Канареечный деплой (canary)
Поднимаем сервис с новой версией, переводим туда трафик от определенной группы пользователей. Если все ок, раскатываем новую версию дальше.
Технически похоже на rolling update, но в случае канарейки мы явно указываем, каким пользователям видна новая версия. Это могут быть бета тестеры или представители заказчика.
Используется такой способ редко, лично ни разу не встречала.
🌚 Shadow deployment
▫️ Поднимаем сервис с новой версией
▫️ Дублируем туда трафик с продакшена
▫️ Смотрим, как сервис справляется (или нет🥲)
Цель shadow deployment - проверить фичи на бэкенде под реальной нагрузкой. Иногда поднимается полная копия продакшен среды. Но чаще все же ограниченный набор сервисов.
❓ Как реализовать эти стратегии?
Основную работу делают девопсы с помощью bash скриптов, Kubernetes, Consul, Istio и их аналогов.
Со стороны разработки может понадобиться
▫️ добавить механизмы включения/выключения фич (feature toggle)
▫️ обеспечить совместимость старой и новой версии по данным и API. На практике бывает сложно, по миграциям данных даже целые книжки пишут!
Ответ на вопрос перед постом – больше всего ресурсов требует Blue-green стратегия. Также принимается вариант с shadow deployment на максималках🔥
Post #584
15.4K
- 🔥 135
- 👍 49
- ❤ 21
- 👎 1