В данной статье заостряется внимание на важности правильного выбора стратегии развёртывания для программного продукта на основе микросервисной архитектуры.
Ключевые слова: микросервисы, стратегия развёртывания, программный продукт.
Стратегия развёртывания определяет процесс и порядок событий при развёртывании микросервисов в контейнерном окружении. Правильный выбор применяемой для программного продукта стратегии развёртывания определяет преимущества, которые в итоге получает продукт: отказоустойчивость, сокращение времени ввода в эксплуатацию, снижение времени простоя, сокращение временных затрат на доставку обновлений [1]. Для принятия верного решения при выборе стратегии развёртывания необходимо учитывать следующие факторы:
− выбранная среда развёртывания;
− допустимое время простоя;
− стабильность новых версий;
− доступность предыдущих версий;
− необходимые вычислительные ресурсы.
Обращаясь к первому упомянутому фактору, возьмём за условие, что контейнерной платформой для продукта является OpenShift (надстройка над Kubernetes). В связи с этим становится необходимым исследование возможностей OpenShift, а именно — встроенных стратегий развёртывания. OpenShift предлагает два варианта стратегий развёртывания микросервисов в своём контейнером окружении: Rolling и Recreate [2].
Rolling стратегия подразумевает плавную замену микросервисов предыдущей версии на микросервисы новой версии. OpenShift производит проверку работоспособности микросервиса новой версии, прежде чем прекратить работу микросервиса предыдущей версии. В случае успешного прохождения проверки все запросы начинают поступать на микросервис новой версии, а старый микросервис прекращает свою работу, освобождая использованные ранее ресурсы. В противном случае, когда сервис новой версии не прошёл проверку доступности после нескольких попыток развёртывания, рабочей остаётся предыдущая версия микросервиса. Таким образом Rolling стратегия обеспечивает нулевое время простоя, сохраняя работоспособными микросервисы предыдущей версии на случай неуспешного развёртывания. Однако стоит заметить, что применение данной стратегии требует вдвое больше вычислительных мощностей, так как в OpenShift фактически разворачивается два экземпляра программного продукта — старой и новой версии.
Стратегия Recreate отличается от Rolling стратегии тем, что OpenShift сначала прекращает работу микросервиса старой версии и только после этого разворачивает микросервис новой версии. Учитывая это отличие, становится очевидно, что при использовании стратегии Recreate программный продукт подвергается значительному риску простоев.
Так как следующий фактор выбора стратегии развёртывания — допустимое время простоя — является не менее приоритетным для любого серьёзного программного продукта, следует ознакомиться и с альтернативными стратегиями развёртывания, обеспечивающими нулевое время простоя, не представленными в составе инструментария OpenShift.
Стратегия канареечного развёртывания, в отличии от Recreate, имеет значимую общую черту с Rolling стратегией: микросервисы новой версии проходят проверку работоспособности перед прекращением работы микросервисов предыдущей версии [3]. Однако, в случае канареечного развёртывания микросервисы новой версии проверяются с помощью перенаправления на них небольшого числа реальных запросов, в то время как остальная часть запросов всё ещё продолжает обрабатываться микросервисами старой версии. В том случае, если микросервисы новой версии корректно обрабатывают адресованные им запросы, процесс канареечного развёртывания считается успешно завершённым. Весь объём запросов направляется на микросервисы новой версии, а микросервисы старой версии прекращают работу. В ином случае микросервисы старой версии продолжают обрабатывать поступающие запросы в полном объёме. Как и стратегия Rolling, канареечное развёртывание обеспечивает нулевое время простоя программного продукта за счёт увеличенной потребности в ресурсах: при исполнении данной стратегии в контейнерном окружении также одномоментно развёрнуты и старая, и новая версии программного продукта. Стоит добавить, что стратегия канареечного развёртывания доступна для применения только в программных продуктах, для которых стабильность не является приоритетом — для микросервисов таких программных продуктов допустимо проводить обкатку непосредственно в рабочем окружении с обработкой реальных запросов. То есть в таких программных продуктах допускаются определённые объёмы некорректно обработанных запросов.
Ещё одной стратегией, обеспечивающей нулевое время простоя при развёртывании новой версии программного продукта, является стратегия сине-зелёного развёртывания. Оригинальное название обусловлено тем, что в контексте данной стратегии микросервисы старой версии называют синими, а микросервисы новой версии — зелёными [3]. Частично эта стратегия похожа на Rolling и канареечное развёртывание: микросервисы предыдущей версии прекращают работу только в случае успешного развёртывания микросервисов новой версии. Следовательно, осуществление сине-зелёного развёртывания также требует вдвое больше ресурсов. Однако, данная стратегия обладает важной особенностью: запросы начинают поступать на обработку микросервисам новой версии только в тот момент, когда все разворачиваемые микросервисы новой версии прошли проверку доступности. Более того, стратегия сине-зелёного развёртывания не подразумевает вывода из эксплуатации микросервисов предыдущей версии после развёртывания микросервисов новой версии. Данная отличительная черта выделяет эту стратегию среди остальных — её можно применять в программных продуктах, для которых важна не только бесшовная доставка новой версии, но и доступность предыдущей версии на случай внештатных ситуаций.
Таким образом, после произведения оценки представленных к обозрению стратегий развёртывания, становится понятно, что для корректного выбора подходящей стратегии развёртывания под конкретный программный продукт необходимо учитывать особенности каждой из них в соответствии со всеми нефункциональными требованиями, выдвигаемыми к программному продукту.
Литература:
- Эберхард В. Continuous delivery. Практика непрерывных апдейтов — СПб.: Питер, 2018.
- Маркелов А. А. Введение в технологии контейнеров и Kubernetes — М.: ДМК Пресс, 2019.
- Хамбл Д., Фарли Д. Непрерывное развертывание ПО. Автоматизация процессов сборки, тестирования и внедрения новых версий программ — М.: Вильямс, 2016.