Стратегии раскатки

Ладно, последний шаг, чтобы все взлетело и наше приложение было готово к реальным пользователям. Вот ты хочешь выкатить свой сервис в прод. Но как же его выкатывать? Какие стратегии существуют?

Есть разные подходы к деплойменту (выкатке) микросервисов. Каждая стратегия имеет свою специфику и подходит под определённые задачи. Сейчас мы разберем только Rolling Release, так как это самый используемый вариант. Например, Kubernetes используют по дефолту эту стратегию.  

Rolling Release

Суть стратегии: обновляешь сервис постепенно, меняя код на новых экземплярах (pods/контейнерах), пока все старые не будут заменены на новые.

Как это выглядит (на примере Kubernetes):

В каждый момент времени часть podов обновляется, часть — еще на старой версии.

Когда использовать Rolling Release:

  • если считаешь, что новая версия вполне стабильна и критичных рисков нет, можно использовать. Если же риски есть, лучше посмотреть на другие варианты — например, Blue/Green deployment;
  • можешь обеспечить непрерывную доступность (downtime минимальный);
  • готов мириться с тем, что часть трафика может идти на старую версию, часть — на новую, пока процесс обновления не завершится. В общем-то, это приемлемо для большинства ситуаций. 

Плюсы:

  • Почти нулевой простой (downtime).
  • Постепенное обновление (можно отследить, если вдруг пойдёт что-то не так).

Минусы:

  • Более длительный процесс деплоя, чем «одним махом».
  • Если потребуется срочно откатиться, придётся заново менять версию на всех pod’ах.

Давай посмотрим на практике. Представь, что мы обновляем сервис реакций в мессенджере. С помощью Rolling Update мы заменяем старые версии на новые постепенно, скажем, по 5% за раз. 

Если в новой версии окажется критический баг (например, сервис падает при определённых эмодзи), мы увидим всплеск ошибок уже на первых 5-10% «обновлённых» пользователей. Это позволит нам сразу остановить выкатку, пока проблема не затронула всех. 

Без постепенности баг ударил бы по 100% пользователей одновременно, а это привело бы к массовым жалобам и срочному откату всего сервиса под нагрузкой.