Проблемы, связанные с релизами it-продуктов на микросервисной архитектуре
Конечно, микросервисная архитектура - это не серебряная пуля. Как
и все в этом мире,
она имеет свою долю недостатков и ограничений. В этой статье я опущу технические аспекты и
сосредоточусь только на проблемах, связанных с управлением релизами
it-продуктов на микросервисной архитектуре. С этой точки зрения
я хотел бы выделить следующие проблемы:
- Частые релизы. По своей природе архитектура микросервисов вынуждает нас
выпускать релизы
чаще, чтобы обеспечить быструю и детализированную поставку нашим клиентам. Вместо одного
релиза монолитного решения мы будем выпускать несколько небольших релизов
нескольких
микросервисов. С точки зрения управления релизами это
создает накладные
расходы на
планирование, отслеживание прогресса и интеграцию. Ситуация станет еще хуже, если учесть тот
факт, что у каждого сервиса свой цикл выпуска.
- Вариативный процесс разработки. Scrum,
Kanban или что-то другое? Нет
проблем. Микросервисная архитектура позволяет командам выбирать свой
собственный процесс разработки без
необходимости согласовывать его с другими командами. Это, безусловно, хорошо для команд
разработчиков, но может стать кошмаром для менеджера продукта или менеджера
релиза (
PO
/RM), которому
необходимо создать единый план для всего решения.
- Зависимости между релизами микросервисов. Для реализации определенной
бизнес-функции
необходимо выпустить все версии соответствующих микросервисов. Такой подход влечет за собой
гораздо большие управленческие расходы по сравнению с выпуском только одной версии
монолитного решения. PO/RM приходится объединять эти
версии в консолидированный план, чтобы
ответить на вопрос «Когда будет предоставлена функциональность?», а не
просто знать дату
релиза монолита. Задержка любой версии приведет к общей задержке всего
процесса поставки.
Поэтому у PM/RM должен быть простой способ интегрировать несколько версий
в единый пакет
поставки и отслеживать, был ли он поставлен в соответствии с планом.
- Интеграционное тестирование end to end. Этот пункт особенно актуален для
корпоративных B2B-решений с рядом запрошенных клиентом кастомизаций. Все решение должно быть
настроено специально для каждого клиента и протестировано после того, как функциональность
будет реализована в каждом конкретном микросервисе. Для этого
PO/RM должен иметь
представление о последней стабильной версии каждого
микросервиса, иметь представление о том,
какие версии развернуты и в каком окружении (пул
окружений или контейнеры в определенной
конфигурации), а также координировать тестирование и приемку.
В Jira есть встроенные версии и функциональность
отслеживания прогресса. Но,
принимая во внимание вышеупомянутые проблемы, существуют открытые вопросы для построения
эффективного релизного процесса микросервисов:
- Невозможно определить рабочий процесс версии, поэтому невозможно понять, на
какой стадии
находится версия. Например, все функциональные требования могут быть
выполнены, но версия
микросервиса должна пройти нагрузочное тестирование перед развертыванием в
производственной
среде.
- Скорее всего, различные команды, разрабатывающие микросервисы, будут
работать по своему собственному workflow в Jira, чтобы
иметь возможность гибко организовать
свой собственный
процесс разработки. Из коробки Jira не имеет удобной функциональности для
визуализации и
отслеживания версий из нескольких продуктов в одном месте.
- Кроме того, было бы выгодно объединить несколько версий микросервисов в один
релиз, который
будет представлять желаемую бизнес-функциональность во всех сервисах.
- Релиз может иметь свой собственный workflow. Например,
перед внедрением в
производство может потребоваться сквозное тестирование, даже после принятия клиентом B2B.
Инструменты для управления релизом
Видно, что Jira обладает большой гибкостью и позволяет устранить
эти ограничения
различными и эффективными способами: используя встроенные возможности или расширяя их с помощью
сторонних приложений.
Вы можете обратиться к этой
полезной статье о том, как настроить workflow
управления релизами с помощью стандартной функциональности.
Альтернативный способ организации управления релизами микросервисов
предлагает
приложение Release
management (Release
management для
Jira
Cloud).
Определим контекст
Представим себе организацию с 5 командами, которые работают над своими собственными
микросервисами:

Схема 5 команд, работающих над it-продуктом с микросервисной архитектурой
Каждый микросервис имеет свой собственный релизный
цикл, который не синхронизирован с
релизными циклами других микросервисов. Обычно каждая
конкретная Пользовательская история (от англ. User story -
формат описания задачи на
новый функционал для
команды разработки) требует внесения
изменений в несколько микросервисов.
Давайте рассмотрим, как приложение Release
management может
упростить
управление релизными циклами микросервисов.
Визуализация версий различных сервисов на доске
Одно из правил Kanban гласит: «Визуализируйте поток». Это правило -
очень важная
концепция, поскольку большинство людей на Земле - визуалы, поэтому они лучше воспринимают
визуальное представление информации. В приложении Release Management можно
импортировать версии
из нескольких сервисов и визуализировать их на доске. Из коробки Jira имеет два
статуса версий:
Releases и Unreleased. Приложение Releases
Management
расширяет эту возможность за счет
пользовательского workflow версий. Workflow легко
интегрируется со встроенными
статусами версий.

Kanban доска в Jira для визуализации версий
Особое преимущество, о котором я хотел бы рассказать, - это возможность
перетаскивать версии из одного столбца в другой на одной доске, так что
менеджеру релиза не
нужно перескакивать между разными страницами веб-интерфейса, чтобы обновить несколько
распределенных версий.
Создание многоверсионного релиза
Хотя хорошо, когда все версии из нескольких сервисов визуализируются на одной доске,
запоминать и держать в голове, какие именно версии должны быть выпущены для реализации
той или иной User story, не надежно и слишком рискованно.
Чтобы решить эту проблему, в приложении была введена сущность
Release. Release может
состоять из нескольких версий. При этом каждая версия может
не принадлежать, принадлежать одному или
нескольким релизам.
В нашем примере мы можем объединить все версии, которые должны быть
поставлены для
расширения китайского рынка, в один Release и отслеживать их вместе.

Kanban доска в Jira для визуализации релиза, нацеленного на расширение Китайского
рынка
Кроме того, сущность Release может иметь свой собственный workflow
для
визуализации деятельности, связанной с поставкой User story, например,
включающий в себя статусы: интеграционное
тестирование, тестирование производительности или приемочноое
тестирование.

Кастомный workflow для Release в Jira
Построение временной шкалы
Управление релизами - это не только статусы, но и
точное знание того, когда будет
готова та или иная версия. Представление в виде Timeline - идеальное решение
для этой цели. Кроме
того, оно хорошо подходит для создания отчетов.

Timeline релизов в Jira
API и интеграция с CI
Непрерывная доставка (от англ. Continuous delivery)
- это все об автоматизации. В идеальном мире инструмент
управления релизами должен быть интегрирован с сервером непрерывной
интеграции, чтобы
автоматически обновлять статусы версий после каждого развертывания.
Приложение Release Management имеет мощный REST
API, который позволяет легко
интегрироваться с CI-сервером с помощью webhooks. Это
значительно сократит объем ручной
работы и накладные расходы менеджеров.
Заключение
Микросервисная архитектура - это мощная технология разработки
программного
обеспечения, отвечающая требованиям современного рынка. Она позволяет решать проблемы
масштабируемости, надежности и качества, а также значительно сокращать время выхода на рынок,
что крайне важно для высококонкурентных рынков.
Чтобы в полной мере использовать преимущества микросервисной
архитектуры, нам
необходимо снизить управленческие накладные расходы, которые естественным образом возникают в
гранулированной и распределенной системе (в отличие от монолита).
Приложение Release Management помогает устранить накладные расходы,
автоматизировать
рутинные операции и создать единое рабочее пространство для RM/PO. Кроме того, оно обеспечивает
лучшую видимость и делает управление сложными, многокомпонентными релизами
простым и
понятным.