Расскажу про системы с микросервисной архитектурой (MSA). Как они устроены, как я их анализировала, какие увидела проблемы и преимущества.

Статья не раскрывает лучшие практики использования микросервисов и не разоблачает их излишнюю популярность. Основная цель - описать технологию и процесс работы с ней с точки зрения системного аналитика.

Если Ваш опыт отличается от того, что указано в статье - пишите комментарии, будет полезно. Ведь систем на микросервисах становится все больше, а в школе к такому не готовят.

Содержание

1. Что такое система с MSA

"Микросервисная архитектура - это стиль проектирования, который разбивает приложение на отдельные сервисы с разными функциями. <...> В микросервисной архитектуре единицей модульности являются сервисы. Сервисы обладают API, которые служат непроницаемым барьером." К. Ричардсон "Микросервисы. Паттерны разработки и рефакторинга"

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

На практике это все может оказаться запутавшейся в себе и своих связях, перегруженной и довольно хрупкой конструкцией. Все зависит от способа приготовления и места приложения.

То есть, как неоднократно писали (раздватри), MSA полезна не везде. Решение о ее использовании не тривиально, такие системы сложны для понимания и требуют особого внимания к своей архитектуре.

1.1. Выявление микросервисов

Вы спросите меня, что такое микросервисы? Я отвечу, что это, как правило, небольшие сервисы.

И вы уйдете, так и не узнав, что каждый реализует свою функцию, у каждого своя база данных и может быть свой стек технологий.

Самый сложный, вероятно, вопрос: как выделять микросервисы? Правильного ответа или алгоритма для этого нет. Все зависит от домена и того, какие проблемы вы решаете.

В главной шпаргалке по MSA в блоке Декомпозиция есть пополняемый перечень используемых подходов.

Давайте рассмотрим на примере способ декомпозиции по поддомену.

Этот подход основан на domain-driven design (DDD). То есть необходимо выявить поддомены системы, у каждого из которых своя доменная модель. Далее поддомены конвертируются в микросервисы.

Допустим, мы делаем систему для заказа продуктов в небольшом магазине рядом с домом. У нас есть пользовательские истории:

  • заказа (order);

  • оплаты (payment);

  • доставки товара (delivery).

Для обеспечения этих процессов необходимо где-то хранить информацию о наличии и количестве продуктов (stock). А также вести финансовый и бухгалтерский учет всех операций (accounting).

Опираясь на доменную модель, мы можем выделить следующие микросервисы:

  • Orders - для сбора, хранения и обработки заказов;

  • Payment - для проведения продаж;

  • Delivery - для хранения информации о передаче в доставку (этот сервис будет взаимодействовать с внешней системой службы доставки);

  • Stock - для хранения информации об остатках товаров в магазине и их характеристиках;

  • Accounting - для хранения бухгалтерских и учетных данных (возможно это просто адаптер для нашей 1С).

Но это не единственный вариант. При декомпозиции стоит внимательно изучить бизнес-процессы и пользовательские требования, а также варианты развития системы.

Например, если конечный пользователь заказывает и оплачивает продукты во внешней системе партнера (какой-нибудь продуктовый маркетплейс). В наш магазин просто приходит информация о необходимости собрать и отправить заказ. Оплату партнер отправляет нам раз в месяц суммарно за все сделанные заказы, с учетом возвратов и пр. В этом случае отдельный микросервис Payment пока что не нужен.


Теперь, когда мы выделили основные микросервисы для нашего домена, давайте посмотрим, что с ними происходит в рамках системы и как при этом работают бизнес-процессы.

1.2. Микросервисы и бизнес-процессы

Бизнес-процессы в системе с MSA обычно проходят через несколько микросервисов.

Вернемся к нашему примеру заказа товаров через интернет. С учетом выявленных микросервисов процесс будет примерно таким:

Каждый этап бизнес-процесса обеспечивается отдельным сервисом. Выглядит симпатично и довольно удобно, согласитесь. Ошибки и доработки легко локализуются, у каждого микросевиса своя простая и понятная всем обязанность.

Но что происходит, когда в системе работает сразу несколько бизнес-процессов?

Скорее всего, эти процессы где-то используют одни и те же данные, а значит будут обращаться к одним и тем же микросервисам, или создавать для себя реплики и разбираться с согласованностью.

Ниже в разделе "Процесс разработки системы с MSA" еще напишу про варианты развития событий в такой ситуации. Но так или иначе стоит учитывать, что разные процессы могут использовать одни и те же микросервисы, причем, бывает, на разных этапах и по-разному.

Например, мы можем в системе для заказа товаров через интернет также проводить процесс продажи товаров непосредственно в магазине. В новом процессе сервис Stock появляется только после оплаты. В отличие от заказа через интернет, где есть предварительная проверка наличия товара.

Для ускорения и упрощения реализации бизнес-процессов в MSA иногда создают отдельные управляющие микросервисы и/или используют инструменты автоматизации.

1.2.1. Управляющие микросервисы

Иногда имеет смысл создать управляющий микросервис, который следит за прохождением процессов через разные сервисы и внешние системы.

В управляющем микросервисе будет происходить вызов разных MS в нужной последовательности. А также, возможно, какая-то промежуточная логика, характерная для конкретного процесса.

Так, для обработки продажи товара в магазине можно создать управляющий микросервис Processes. Он сначала вызовет MS Payment для проведения оплаты, затем MS Stock для изменения остатков товара и MS Accounting для фиксации финансовых операций в отчетности.

1.2.2. Платформы BPM

В управляющих микросервисах удобно использовать движки для автоматизации процессов, например Camunda BPM. Такие инструменты позволяют в графическом виде задавать последовательность действий, проверки и условия переходов. При запуске процесса платформа самостоятельно выполняет все описанные шаги.

Вернемся к нашему примеру продажи в магазине:

При реализации этого процесса через Camunda необходимо сделать его BPMN-схему (например, в Camunda Modeler):

Процесс OfflineSale в Camunda BPM
Процесс OfflineSale в Camunda BPM

Каждый прямоугольник на схеме ссылается на код с логикой:

  1. Payment Process - проведение оплаты вызовом MS Payment.

    1. Error Message - если оплата не состоялась по какой-то причине, то происходит отправка сообщения об ошибке и завершение процесса.

  2. Change Stock - изменение количества товара в MS Stock.

  3. Change Accounting - обновление фин. отчетности в MS Accounting.

При инициации продажи MS Processes запустит этот процесс и Camunda выполнит каждый этап в заданной последовательности.

Более сложные схемы могут включать разветвления, таймеры, подпроцессы и пр.

Удобно, что уже описанные элементы одного процесса легко переиспользуются в другом процессе. Также небольшие изменения можно реализовывать без программирования.


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

1.3. Интеграции

Как вы, наверное, уже догадались, система с MSA - это тот еще Вавилон, где интегрируются все со всеми любыми мыслимыми способами.

Помимо своей базы данных у каждого микросервиса еще и свой API, любого протокола и вероисповедания. Вот он, век индивидуализации, во всей своей красе.

1.3.1. Взаимодействие между микросервисами

Нет каких-то правил или ограничений для формата интеграций между микросервисами. В рамках одной системы используют разные протоколы и подходы, синхронное и асинхронное взаимодействие.

Обычно архитекторы отдают предпочтение REST+JSON/GraphQL/gRPC и обмену сообщениями с помощью брокера типа Kafka и MQ Rabbit. Итоговый выбор инструментов зависит от требований и возможностей команды.

Рассмотрим возможную последовательность вызовов для реализации процесса продажи товара в магазине из нашего примера:

MS Processes вызывает MS Payment для инициации оплаты и ждет от него обратную связь, чтобы продолжить свою работу. После получения ответа, происходит аналогичный синхронный вызов к MS Stock для списания товаров. Далее в сообщении для брокера уходит информация для MS Accounting, реализуя асинхронное взаимодействие. И MS Processes завершает свою работу, совершенно не беспокоясь, получил MS Accounting данные о покупке или нет.

Стоит учитывать, что каждый микросервис может внезапно отказать и у нас таких ненадежных ребят много. То есть доступность в MSA на самом деле так себе. Многие брокеры гарантируют доставку, и никто не висит "на линии", ожидая ответа. Поэтому рекомендуется по возможности использовать асинхронное взаимодействие между сервисами.

Но в любом случае всегда надо продумывать сценарии-"предохранители": то есть писать отдельный код на случай отказа каждого звена в процессе.

1.3.2. Интеграции с другими сервисами

Внешние сервисы, если им повезет, взаимодействуют с MSA-системой через API-шлюзы.

По К. Ричардсону API-шлюзы занимаются:

  • объединением API для запросов к нескольким микросервисам;

  • распределением запросов по нужным микросервисам;

  • преобразованием разных протоколов интеграций (как микросервисов, так и внешних систем);

  • реализацией граничных функций вроде аутентификации.

Вполне вероятно, что для каждого фронта или внешней системы будет свой API-шлюз. Так как это соответствует духу независимости и позволяет командам не убить друг друга.

В нашем примере в качестве API-шлюза вполне может выступать MS Processes. Однако при более сложных процессах и интеграциях бывает проще и надежнее их разделить. Например, если у нас есть свой фронт и внешний сервис, которые интегрируются по разным протоколам и поддерживаются разными командами. Но внутри приложения обе интеграции запускают один и тот же процесс.

Как правило внешним системам шлюз предоставляет REST+JSON API, так как в нему все привыкли и считают простым для интеграции. Но можно использовать и GraphQL, который позволяет клиенту указывать в запросе, какие именно данные нужно вернуть. Этот подход помогает при работе с несколькими клиентами, у каждого из которых свои цели и пристрастия.

Можно использовать и другие инструменты для разработки API-шлюзов, можно вообще взять готовый продукт, например AWS API Gateway. Главное - не забыть договориться со всеми потребителями нашего API.

1.4. Отчеты и мониторинг

Итак, у нас есть микросервисы и их интеграции, которые реализуют бизнес-процессы. Для нормального функционирования за этим всем нужно пристально наблюдать, выявлять эффективность и слабые места. И здесь тоже есть свои особенности, связанные с архитектурным подходом.

Нельзя просто так взять и одним запросом к БД собрать сквозной отчет по процессу. Для этого нужен специальный сервис, который будет собирать копии нужных таблиц из всех микросервисов. И только на его основе специально обученные люди будут создавать красивые картинки. В общем, чтобы заказчик мониторил бизнес-показатели, без DWH и BI-системы не обойтись.

Также сложновато без специальных инструментов, типа Kibana, посмотреть, где сломался объединяющий несколько API процесс. И, конечно, для этого необходимо продумывать систему логирования: что, как и когда каждый микросервис будет писать в логи.

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

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


Подводя предварительный итог можно сказать, что на каждый чих аспект системы нужен отдельный микросервис, интеграция и, возможно, отдельная технология. Это придает определенное своеобразие работе с MSA, в том числе задачам аналитика.

2. Что происходит с аналитиком

Если коротко, то аналитик на проектах с MSA устраняет неопределенность. Впрочем, как и везде.

Есть десятки микросервисов и их интеграций, разные технологии и архитектурные паттерны. Процессы, которые действуют по-разному и имеют разные цели, но пересекаются с друг другом. В такой ситуации командам очень сложно разобраться, что, куда и зачем передается, как проходит процесс полностью, что на него может повлиять, на что он может повлиять.

То есть здесь кому-то очень важно уметь:

  • приводить хаос в порядок;

  • выявлять требования;

  • проектировать интеграцию;

  • понимать ключевые и потенциально опасные части процессов;

  • контролировать знания команды о системе;

  • доносить до бизнеса возможности и ограничения продукта.

В общем, для бизнеса и команды аналитик может быть более чем полезен в микросервисной ситуации. Осталось понять, как аналитику не лопнуть от такого счастья.

2.1. Процесс разработки системы с MSA

Часто команды выделяются на продукт или продуктовое направление.

В нашем примере могло бы быть такое разделение:

  • Команда А - разрабатывает все, что связано с процессом оффлайн продаж в магазине.

  • Команда Б - делает процесс онлайн-продаж и все соответсвующие задачи.

Микросервисы Payment, Stock и Accounting используются в обоих процессах.

Каждый общий сервис может дорабатываться только конкретной командой, возможно, это будет третья Команда В. Но это может стать узким местом и замедлить разработку. Так как другим командам придется ждать, пока у команды-владельца сервиса дойдет очередь до их задачи.

Еще можно дублировать общие микросервисы, не смешивая разные процессы. То есть у обеих команд будут свои Payment, Stock и Accounting. Таким образом каждая команда сможет дорабатывать и развивать их исключительно для целей своего продукта. В этом случае придется строго следить за согласованностью данных. И смириться с тем, что вы будете дублировать большинство доработок.

Общие микросервисы также могут дорабатываться сразу обеими командами. Но тогда необходимо, чтобы кто-то решал конфликты интересов, обеспечивал обратную совместимость и отслеживал целостность и независимость каждого такого микросервиса. Хорошо, если для этого назначается конкретная команда и конкретные люди, которые будут делать вдумчивое ревью каждой доработки.

2.2. Задачи аналитика

Для адекватного анализа необходимо знать все, что как-либо затрагивает или может затронуть твой продукт. То есть аналитикам на проектах с MSA необходимо понимать:

  • свой продуктовый процесс;

  • логику работы всех задействованных в продукте микросервисов и механизмы их взаимодействий;

  • процессы продуктов, которые используют те же микросервисы;

  • внешние интеграции, их механизм и логику.

Рассмотрим пример, когда надо добавить в метод создания заказа новое поле discount. В этом поле содержится размер скидки, которую интернет-магазин предоставил покупателю.

Для реализации этого небольшого изменения необходимо:

  1. Понять, есть ли в системе подобное поле для скидок, которые предоставляет наш магазин. Если есть, то проработать их взаимодействие и исключить путаницу.

  2. Добавить поле в API-шлюзе для внешних систем.

  3. Добавить поле в API MS Order, его логику и, возможно, БД.

  4. Понять, необходимо ли передавать новое поле в MS Payment. Или достаточно изменить логику расчета цены товара при передаче данных о заказе.

  5. Обновить публикуемые сообщения, связанные с созданием заказа. Определить, какие еще сервисы должны быть оповещены о предоставлении скидки через брокер сообщений (например, MS Accounting).

  6. Добавить в MS Accounting новое поле и логику его обработки.

  7. Продумать, что делать, если на любом из этапов случится сбой (транзакций на весь процесс нет в силу разных БД у микросервисов).

  8. Узнать, как этот показатель должен отражаться в бизнес-отчетах и добавить его в DWH/BI (если повезет, через специально обученных людей).

Бизнес-требования и функционал системы определяют, в каких микросервисах, API и БД должны появиться поле и логика его обработки. То есть разработчик с этим не подскажет. А для заказчика это будет "вам нужно всего лишь добавить одно поле".

Систему с MSA не получится рассматривать как чёрный ящик, где аналитик определяет требования к результату "на выходе". Потому что "на выходе" тут - это на границе каждого микросервиса и все эти границы надо проектировать и определять.

Таким образом, с точки зрения анализа систему с MSA можно рассматривать как десятки небольших систем и интеграций между ними. То есть задачи схожи с работой над любой интеграцией. Но есть один нюанс - интеграций много и они меняются при каждой доработке, вслед за малейшим изменением логики или данных.

2.3. Возможные проблемы

Обозначу основные проблемы, с которыми довелось столкнуться, в порядке убывания бесячести.

2.3.1. Ничего не понятно

Многообразие сервисов, интеграций и технологий со стороны может выглядеть как запутанный клубок разных проводов. И чтобы вытащить свою зарядку для телефона, приходится распутывать LAN, провод от лампочки, чей-то переходник и Ктулху знает что еще.

Но в отличие от проводов, с микросервисами часто еще и не понятно, как их вообще распутывать.

Можно читать код. И мы, например, поймем, что нотификация отправляется при условии comission= true. А почему так происходит - не узнаем. И тем более не узнаем, что где-то в другом конце системы при comission= false отправляется другая нотификация.

Можно обращаться к гуру, которые все это делали и помнят. Только гуру, как известно, всегда заняты, потому что незаменимы. И скорее всего они что-то забыли или, что хуже, не знают о том, что они что-то забыли.

Мне видится, что единственный адекватный способ решить эту проблему - это создать культуру и паттерны ведения документации. Документации, которая описывает общую архитектуру, процессы, точки влияния и, главное, бизнес-требования, которые стоят за логикой работы сервисов. Можно воспользоваться моей памяткой.

Это, конечно, сложная задача, потому что требует слаженной работы всех аналитиков, их координации и дисциплинированности. А также понимания со стороны руководства, что это необходимая работа. Если у меня когда-нибудь получится внедрить или хотя бы увидеть такую красоту в рамках всей системы - обязательно об этом напишу.

2.3.2. "Чужие" доработки

Это когда ничего не понятно, а потом раз - и становится еще непонятнее. Потому что другая команда что-то сделала в общем микросервисе. Другая команда молодец. А у вас что-то сломалось или не работает новый функционал, который, судя по документации, должен бы работать.

Решение видится в совокупности факторов:

  • повсеместное покрытие автотестами, что и так обязательно для MSA;

  • документирование всех изменений в едином пространстве ДО реализации (например, писать новые требования на общей странице и выделять их тегами со ссылкой на задачу, где эти требования будут реализованы);

  • обязательный этап анализа - проверка влияния доработки на другие процессы;

  • очень дружная и активная коммуникацией аналитиков.

Документирование в таких объемах само по себе может стать проблемой, поэтому стоит посмотреть в сторону автоматизации. Так вы не будете тратить время хотя бы на таблички с API и БД. Но для этого придется поуговаривать разработчиков прикрутить какой-нибудь swagger2markup и выгрузку актуальных полей БД.

Ну или можно строго придерживаться правила "один микросервис - одна команда".

2.3.3. Заказчику сложно

Бизнес ничего не понимает сильнее, чем обычно. Откуда такие сроки, почему все сломалось, зачем вам этот GraphQL?

Чтобы принимать решения по продукту, надо разбираться в работе системы. А значит и всех этих переплетениях процессов, о которых тут так много написано. Хорошо бы совместно с менеджерами составлять ту самую бизнес-документацию и поддерживать ее актуальность.

А еще производительность команды на микросервисах зависит от большого количества факторов. Да и задачи могу быть на самом деле не тем, чем кажутся. Тут уже аналитику надо придумать, как все эти сложности доступно объяснить. Можно попробовать пример с гномиками, как у Максима Цепкова. Или показать на простом примере вроде добавления поля discount. И, опять же, если будут схемы и описания, можно просто тыкать пальцем - где и что вам нужно в итоге сделать для реализации этой "быстрой" доработки.

2.3.4. Требуется много знаний

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

Но начинать карьеру в такой обстановке - это, кажется, Спарта. Особенно если система обладает всеми проблемами из списка выше. Возможно, кураторство и планы индивидуального развития облегчат ситуацию.

Помимо знаний о самой MSA, нужно быть готовым разобраться в принципах REST, брокеров сообщений и любом способе интеграции, который придет в голову вашему архитектору.

Возможно вас также затронут JWT, инстансы, балансировка, развертывание, анализ производительности, доступности и другие сложные слова.

Ну и совершенно не лишним будет стандартный набор аналитика из работы с требованиями, моделирования, написания понятной документации, БД и SQL и проектирования интеграций.

Очень рекомендую книгу Ричардсона "Микросервисы. Паттерны разработки и рефакторинга" - там про все понемногу и очень понятно объясняется.

2.4. Плюсы MSA для аналитика

Несмотря на все проблемы и сложности, работать с микросервисами мне понравилось. И вот почему:

  1. Во-первых, это интересно. Это как большой конструктор, из которого можно собирать разные процессы. Менять кубики местами и переворачивать нужными гранями для разных плоскостей. Если нравятся интеграции и копаться в технических аспектах - то вы по адресу.

  2. Относительно легко добавлять новые продукты и функции. Для этого пишут новые микросервисы и не нужно беспокоиться о том, что новый код как-то сломает работающие процессы. И даже если вы правите уже работающие микросервисы, то отследить зависимости и влияние проще, чем в монолите.

  3. Если вы знаете свои процессы, то скорее всего быстро сможете определить, в каком микросервисе у вас сбоит при ошибке. И так как микросервисы относительно простые - то исправить тоже будет несложно (наверное). И при обновлении можно выкатить только свой микросервис, не беспокоя соседей.

  4. Скорее всего вы будете работать с профессионалами. Микросервисная архитектура создает вызовы для аналитиков, разработчиков, QA, DevOps и даже менеджеров. То есть все члены команды должны обладать определенным опытом и навыками для нормальной реализации этого подхода.

  5. Как писала выше, работа с MSA - это возможность узнать много нового и поработать с разными технологиями. А значит и развиваться в любимом деле, вырасти как специалист и открыть для себя новые карьерные перспективы.

  6. В системах с микросервисами аналитик бОльшую часть времени занимается именно анализом. На "неаналитические" задачи попросту не остается ресурса. Здесь аналитик по полной реализует свои профильные hard и soft скиллы.

Итог

Микросервисная архитектура - это много разных технологий, интеграций и возможностей для развития как систем, так и людей.

Работа на проекте с MSA подразумевает особый подход, определенные навыки и знания. Нужно разобраться в деталях процессов и технологий. Возможно, изучить что-то или придумать новую схему работы, взаимодействия с заказчиком и коллегами.

Все это вполне постижимо и действительно интересно, хоть поначалу и не совсем прозрачно.

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

Комментарии (22)


  1. akhkmed
    12.10.2021 23:56

    Большое спасибо за статью.

    Насколько детально должен системный аналитик задуматься о поддержании целостности данных, когда он рисует диаграмму последовательности по взаимодействию микросервисов? Либо этот вопрос оставим для архитектора/разработчиков?


    1. TatyanaSalnikova Автор
      13.10.2021 00:07

      Спасибо за комментарий.

      Не совсем поняла вопрос: целостность данных должна поддерживаться при проектировании БД. Диаграмма последовательности описывает вызовы к сервисам. Или Вы что-то другое имели в виду? Может, есть пример?


      1. qrKot
        14.10.2021 04:36
        +1

        Видимо, тут вопрос про что-то вроде распределенных транзакций и непротиворечивость данных.

        В случае с транзакциями: при отмене заказа в сервисе orders должен измениться незарезервированый остаток в сервисе stock (навскидку, все совпадения случайны).

        В случае непротиворечивости данных: должно ли при изменении наименования товара А в сервисе goods изменяться название товара в заказе сервиса orders.

        Ну и плюсом: микросервисная архитектура накладывает свои ограничения, боттлнеки - чья головная боль, аналитика или архитектора?


        1. TatyanaSalnikova Автор
          14.10.2021 14:02
          +1

          Спасибо. Такие задачи часто определяются бизнес-требованиями и непосредственно влияют на функционал. Так что аналитику как минимум нужно знать о их реализации. В моей практике это описывал аналитик в требованиях (не обязательно прямо всё в диаграммы вставлять, они так становятся тяжело читаемыми). А команда подхватывала и задавала неудобные вопросы/тест-кейсы для проверки полноты, непротиворечивости и пр.

          Но в принципе нет какого-то универсального свода обязанностей для любого члена команды разработки. В agile-командах люди договариваются и сами решают, как им удобнее работать. То есть команда может решить, что аналитику лучше заниматься общением с заказчиком и разработкой процессов, а все эти предохранители, повествования, взаимосвязи данных и пр. - задача разработчиков. И на конкретном продукте это действительно может быть эффективно.

          По поводу архитекторов: тут, на мой взгляд, тоже зависит от конкретики. То есть если все процессы плохо работают из-за низкой доступности сервисов и синхронного обмена между ними - это скорее коллегиальная задача, лидируемая архитектором. А если в вашем апи-шлюзе перегружен какой-то метод - вроде можно и самим решить вопрос. В целом, мне кажется, что любая проблема системы/продукта - это общая головная боль, каждый должен подключаться к решению по мере своих возможностей и компетенций.


          1. akhkmed
            31.10.2021 00:46

            Думаю, что когда аналитик проектирует диаграммы последовательности, то уже начинает понемногу вторгаться на территорию архитектора из-за учёта нефункциональных требований. Ну а когда в требованиях появляется указание использовать асинхронное взаимодействие и отдать обработку ошибок на откуп брокеру, то без проработки возможных последствий, а в особенности недостижимого консистентного состояния в общем случае, это вторжение не пройдёт незамеченным. И речь тут вообще не про роли в agile, а про последствия для системы.


            1. TatyanaSalnikova Автор
              31.10.2021 23:24
              +2

              В целом да, когда кто-то выполняет работу, для которой у него недостаточно компетенций - это чревато проблемами. Однако не факт, что аналитик не в состоянии качественно проработать "возможные последствия". Особенно если речь идет о конкретных процессах системы, а не об общих арх. подходах.

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


        1. akhkmed
          28.10.2021 23:23

          Спасибо, что уточнили. Этот вопрос и подразумевал.


  1. Paskin
    13.10.2021 00:13
    -1

    В качестве аналитика, я бы вместо последовательности вызовов (диаграмма "Процесс OfflineSale") описал бы зависимости - что нужно вызывать после чего. И все микросервисы заставил бы слушать шину сообщений. Чтобы например, управление запасами работало не синхронно, а по событию об оплате, в свою очередь генерируя событие Purchase - тем более что у вас все равно message broker уже присутствует. Если захочется - все эти события можно пересылать еще и клиенту - держа его в курсе происходящего.
    Это позволит избежать многих проблем - от простейших, когда ответ не возвращается пока функция-обработчик запроса не закончит работу - до более сложных, когда все обработчики ждут "притормознувший" микросервис, отказывая клиентам в обслуживании других запросов.
    И разбираться в этом гораздо проще - по логам брокера сразу видно, что происходило и когда.


    1. TatyanaSalnikova Автор
      13.10.2021 00:20

      Спасибо за комментарий. Там ниже написано про возможные проблемы с доступностью и что в идеале взаимодействия между микросервисами лучше делать через брокер. Но аналитик не всегда принимает такие решения и иногда просто работает с тем, что есть. А бывают и прямые вызовы микросервисами друг друга. Поэтому на диаграмме указала разные варианты взаимодействия.

      Подскажите, а в каким формате Вы бы описывали зависимости?


      1. Paskin
        13.10.2021 00:41
        +1

        Граф бы нарисовал, либо таблицу - успех какого действия (или их набора) "запускает" текущее действие.


    1. Nashev
      16.10.2021 11:06

      Не слышал, чтоб менеджеры очередей были серебряной пулей. У них там свои беды, кажется


      1. Paskin
        16.10.2021 21:08

        "Серебряной пули" не существует - но проще поддерживать один менеджер очередей, чем 3-5 разных HTTP-клиентов/серверов, сервисов discovery, балансировщиков и прочие инфраструктуры.


  1. Katjka
    13.10.2021 11:47

    Большое спасибо за статью! Схемы к статье в какой программе прорисовывались (process offline sale, интеграция с внешним сервисом и т.д.) - очень эффектные получились для восприятия (BPM процесс я так поняла в Camunda Modeler)? Спасибо.


    1. TatyanaSalnikova Автор
      13.10.2021 11:48
      +1

      Спасибо) Это https://excalidraw.com. А bpmn в Camunda Modeler, да.


  1. Arashi5
    13.10.2021 14:09
    +1

    Спасибо. Добавил статью в закладки. Буду шарить аналитикам с монолитным сознаним.


  1. IgorNE
    15.10.2021 12:50

    На бизнес вы зря наговариваете) Сейчас продуктовые команды обычно содержат достаточно прошаренный бизнес. У нас, например, даже архитектуру прорабатывают с архитекторами )


    1. TatyanaSalnikova Автор
      15.10.2021 12:52

      Ну что тут скажешь: Вам крупно повезло) Очень рада, что такие кейсы есть.


  1. axtrace
    15.10.2021 14:59

    Было бы интересно узнать подробнее про последовательность и форматы документации.

    Делаете ли модель потоков данных? Когда/как разбиваете на процессы? Диаграммы последовательностей, что еще создаете?


    1. TatyanaSalnikova Автор
      16.10.2021 15:06

      Ох, это тема для отдельной статьи. Ну и как и писала, пока у меня и коллег не получилось внедрить систему документации, которая бы закрывала все вопросы.

      DFD не делали: верхнеуровнево эти данные на схемах бизнес-процессов отображали, а ниже уже на сиквенсах. Процессы формируются в соответствии с бизнес-задачами (то есть задача реализовать такой вот процесс) или по сути являются вариантами использования.

      Документировать стараюсь начиная с описания бизнес-процесса (схема/BRD/use cases). Далее есть шаблон для описания микросервиса и его API, схемы bpmn для Camunda. Диаграммы sequence, activity, state в основном.

      По поводу диаграмм также хочу отметить, что в ситуации, когда процесс правят много команд, иногда лучше вообще не рисовать диаграмму. Потому что кто-то обязательно забудет ее изменить и она станет неактуальной. А лучше никакой документации, чем неактуальная, выдающая себя за актуальную.

      Вот кстати хороший шаблон для описания микросервиса: https://github.com/cer/microservice-canvas


  1. Moskal368
    16.10.2021 23:19

    Одной из проблем тех, кто работает с Сервисами, является неправильное структурирование. Вот на этом ресурсе  https://www.opengroup.org/soa/source-book/soa_refarch/p5.htm описана 10 уровневая модель. Эта модель широко применяется в мире. Более того, примерно тоже самое, что описано на этом сайте, но с небольшими отличиями является стандартом ISO/IEC 18384 части 2 и 3. Хороший пример практического применение 10 уровневой модели - это любимый многими Kubernetes, он с небольшими оговорками полностью ложится в эту модель.

    Ресурс очень большой. И для того, чтобы прочесть его, не говоря уже о том, чтобы осознать требуется время. Причем, надо сразу понимать, что работа в парадигме SOA требует перестройки сознания. Многое то, что является привычным и банальным в SOA, работает не так. Например, UML имеет расширения. Поэтому я бы советовал начать вот с этого https://www.opengroup.org/soa/source-book/togaf/p4.htm

    Если это покажется слишком заумным, то посмотреть на рисунок, описывающий эталонную архитектуру SOA из предыдущей ссылки и прочесть https://www.opengroup.org/soa/source-book/soa_refarch/p4.htm

    На возражение Аналитиков, что это все ближе к Архитекторам, чем к Аналитикам хочется возразить, что понимание 10 уровневой модели помогает правильно структурировать сквозной характер событий на уровнях Интеграции (Integration), Качества обслуживания (Quality of Service) и Информационном (Information).


  1. EgorMaryushko
    20.10.2021 13:40

    Татьяна, большое спасибо за интересную статью!

    Заинтересовал момент о квалификации аналитика и пороге вхождения в проекты с микросервисной архитектурой. В голове родился популистский слоган: "Джунам и новичкам тут нет места!" Но давайте по порядку.

    Если смотреть со стороны, то аналитиков и их задачи в проекте с микросервисной архитектурой можно разделить на две роли/категории:

    • аналитики решения (аналитики кроссервисных задач)

    • аналитики сервисов

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

    аналитики сервисов - решают задачи, контекст которых локализован внутри отдельных сервисов, и для аналитика это становится просто продуктом, который имеет ряд внешних интеграций.

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

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

    Однако вопросы роста команды, вместе с ростом количества задач и текучки кадров, всегда будут актуальны, отсюда наиболее эффективным маршрутом адаптации и развития аналитиков видится их первичное привлечение к решению задач в рамках отдельных сервисов с последующим расширением кругозора на всю систему и переходом уже в разряд аналитиков решения.

    Интересно услышать ваше мнение на этот счет? =)


    1. TatyanaSalnikova Автор
      20.10.2021 14:03

      Егор, спасибо.

      Такого варианта распределения задач не видела. Вот какие соображения есть на этот счет: задачи обычно приходят на процесс в целом, то есть старшему аналитику так или иначе нужно будет прорабатывать общую задачу. Далее старший аналитик декомпозирует большую кроссервисную задачу на более простые подзадачи. В этот момент теоретически старший аналитик может раздавать подзадачи младшим аналитикам. В целом, это хороший способ обучения и распределения задач.

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

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