Лучшие DevOps практики и кейсы

Как выбрать стратегию развертывания


Стратегия развертывания – это способ обновления или изменения приложения. Основная цель – плавно и стабильно вносить изменения без простоев. Как правило, выбор стратегии развертывания зависит от бизнес-задач и ожидаемого воздействия на систему и конечного пользователя. Существует шесть типов стратегий развертывания:
  • Recreate – версия A прекращена, и версия B развернута.
  • Ramped (непрерывное обновление) - версия A постепенно заменяется версией B
  • Blue / green - версия B выпускается вместе с версией A, а затем трафик переключается на новую версию.
  • Canary – версия B выпускается для группы пользователей для тестирования, а затем развертывается для всех пользователей.
  • A / B-тестирование - версия B передается группе пользователей для тестирования, а затем трафик медленно меняется на версию B
  • Shadow - версия B получает дубликат реального трафика от версии A и не дает ответа.
Это шесть основных стратегий развертывания, теперь мы проанализируем их и продемонстрируем плюсы и минусы всех подходов. Протестировать данные стратегии можно в Kubernetes, в этой утилите есть большие возможности для развертывания приложений.

Recreation

Стратегия воссоздания - это простое завершение работы версии A и выпуск версии B. Этот метод означает наличие простоя между отключением старой версии и загрузкой новой. Продолжительность отключения зависит от обоих этих действий.

Преимущества

  • Легко настроить
  • Нет необходимости поддерживать 2 версии приложения

Недостатки

  • Время простоя влияет на конечного пользователя и зависит от процессов завершения старой версии и масштабирования новой версии.

Ramped

Стратегия плавного перехода означают, что версия A постепенно заменяется версией B. Инстансы с версией A отключаются один за другим, в то время как инстансы с версией B развертываются. Когда все готово, балансировщик нагрузки передает трафик от инстансов A к инстансов B. Когда все в порядке, инстанс A отключается. Эта процедура повторяется до тех пор, пока все инстансы с версией A не будут заменены версией B.

Преимущества

  • Легко настроить
  • Постепенное развертывание на инстансах
  • Без простоев
  • Подходит для приложений, которые могут отслеживать состояние и балансировать данные

Недостатки

  • Развертывание/откат может занять время
  • Для поддержки нескольких инстансов с различными версиями приложения требуются определенные навыки
  • Нет контроля трафика

Blue/Green

Развертывание по такой схеме отличается от стратегии постепенного развертывания. Версия B выкатывается на том же количестве инстансов, что и версия A, и после подтверждения всех тестов трафик переключается на версию B балансировщиком нагрузки.

Преимущества

  • Мгновенное развертывание
  • Все инстансы меняются сразу
  • Нет проблем с версиями

Недостатки

  • Дорого, так как требует удвоения ресурсов
  • Все тесты необходимо провести перед запуском

Canary

Развертывание Canary означает постепенное переключение нагрузки с инстансов версии A на инстансы версии B. В большинстве случаев трафик переключается постепенно, например, с 10% на 90%. Этот метод будет полезен, когда недостаточно тестов или разработчики не уверены в стабильности версии.

Преимущества

  • Выпуск версии для группы людей
  • Быстрый откат
  • Удобно для мониторинга ошибок

Недостатки

  • Медленное внедрение

A/B testing

A/B-тестирование - это скорее принятие решений и планирование, чем стратегия развертывания. Это стратегия развертывания схожа с Canary. Во время A/B-тестирования часть трафика направляется к набору инстансов с новой версией приложения при определенных условиях. Это позволяет контролировать все процессы и проводить тестирование в производственной среде. Также это хороший инструмент для сбора статистики и отзывов пользователей. Его можно использовать для тестирования различных версий приложения и развертывать наиболее подходящую для клиентов.
Есть набор параметров, которые можно использовать для распределения трафика:
  • Геолокация и локализация
  • Технологические особенности (размер экрана, операционная система, версия браузера и т. д.)
  • Язык и многие другие.

Преимущества

  • Несколько версий запускаются одновременно
  • Полный контроль над трафиком
  • Расширенное тестирование в живой среде

Недостатки

  • Требуется расширенный балансировщик нагрузки
  • Требуется расширенный мониторинг, потому что трудно устранять ошибки для различных версий.

Shadow

Теневое развертывание означает, что версия B выпускается вместе с версией A, но не получает прямой трафик. Однако разработчики реплицируют трафик из версии A, который можно использовать для тестирования производительности. Развертывание приложения выполняется только тогда, когда все тесты соответствуют требованиям. Этот метод сложен в настройке, например, трафик с покупок может создать ситуацию, когда покупатель заплатит дважды.

Преимущества

  • Тестирование производительности приложения без реального трафика
  • Не влияет на пользователя
  • Развертывание завершается только тогда, когда все тесты соответствуют требованиям

Недостатки

  • Дорого, так как требует вдвое больше ресурсов
  • Сложен в настройке
  • Не настоящее пользовательское тестирование и отзывы
  • Требуются сервисы для имитации данных

Подводя итог, можно сказать, что существует множество способов развертывания приложения, и вы должны выбирать, исходя из бюджета и требований. Для развертывания оптимальным выбором является Ramped и Blue/Green, но правильное тестирование также важно. Кроме того, стратегии Blue/Green и Shadow может повлиять на бюджет, поскольку требует дополнительных ресурсов. Если вы сомневаетесь в своих процессах тестирования, вам следует использовать A/B тестирование, Canary и Shadow развертывание. Когда дело доходит до тестирования с некоторыми конкретными параметрами, поможет A/B-тестирование. Shadow-тестирование может помочь в некоторых важных вещей, таких как переход на новую технологию баз данных. Таким образом стратегии развертывания предоставляют широкие возможности для тестирования и настройки -  воспульзуйтесь этой таблицой, чтобы выбрать подходящую:

И если вы хотите их протестировать, мы рекомендуем вам использовать Kubernetes. Если вы не знаете что это и нужно ли вам его использовать, прочтите нашу статью.

Если у вас есть вопросы по выбору подходящей деплой стратегии для конкретной ситуации или вы хотите построить DevOps процесс - напишите нам, чтобы обсудить детальнее.
Статьи