Комментарии 25
Вам придется заново сделать анализ потребностей бизнеса для правильной “нарезки”:
А можно как-то это проиллюстрировать примером? Ведь есть уже работающая система, все проанализировано, спроектировано, реализовано и оттестировано. Чем бизнес недоволен, что не является non-functional requirements?
Это все "детали реализации", нет? При чем тут бизнес?
В зависимости от стратегии и устройства всей компании будет делаться нарезка.
С трудом представляю себе, каким образом следующее описание связано с "устройством компании":
сервис, который должен заниматься расшифровкой, заодно работает с архивами и в базу данных кладет файлы и в папочки на FTP скидывает какие-то вещи.
Вот мы переводим это дело на микросервисы. Что тут может дополнительно дать анализ "потребностей бизнеса"?
Кроме того, автор пишет: «Кроме этого, до начала работ желательно договориться с командой, писавшей монолит, чтобы они выделили время на ваши вопросы по коду.» — что намекает на то, что перевод на монолит осуществляет отдельная команда и в таком случае сделать повторный анализ бизнес-требований полезнее вдвойне, новые разработчики находятся вне контекста и не смогут грамотно спроектировать систему, не погрузившить в оный.
Ну как минимум можно узнать у бизнеса, зачем вообще нужно выкладывать файлы на FTP
Я бы хотел рассмотреть пример, желательно близкий к реальности, как это все происходит.
Пока это все мне видится так — технический долг превысил критическую массу и система начала тонуть, люди разбегаются, документации нет. У бизнеса возникают проблемы, бизнес хватается за голову и нанимает/вызывает авральную команду. Этой новой команде, конечно же, придется начать с анализа потребностей бизнеса.
Если же все в относительном порядке, просто возникли проблемы с масштабируемостью монолита, то можно заглянуть в существующую документацию и оттуда узнать про то, какие потребности бизнеса и каким образом реализованы. Понятно, можно что-то уточнить. Но "заново сделать анализ"?
1. Шифрование и распаковка важны для бизнеса? Часто используются?
1.1. Нет, используются редко, нет нагрузки, используются всегда вместе. Значит оставляем их вместе, не закладываем масштабирование.
1.2. Да, важны. Бизнес живет на обработке входящих документов, которые бывают зашифрованы и заархивированы. Кроме этого, архивация требуется многим другим отделаем. Значит, делает на шифрование и архивирование отдельные микросервисы со своими SLA и подходом к масштабированию.
В общем просто из-за моды это деньги на ветер, решение должно созреть на объективной почве.
В монолите содержится много разных utility классов, включая бизнес-логику, которые используются в разных частях (которые в итоге должны быть разными микросервисами). И как вот с этим быть? Копипастить код? Конечно нет, ведь бизнес-логика постоянно развивается. Выносить в подключаемые библиотеки? Во-первых это сработает только если все сервисы на одном языке. А во-вторых это сильно усложняет внесение правок в эти библиотеки — ведь раньше можно было сделать find usages по монолиту, а теперь по куче сервисов, да еще и отвечают за них разные люди. Использовать отдельный микросервис с бизнес-логикой? Тогда это будет монолит в миниатюре.
Если кто-то владеет информацией как решаются такие вопросы, или просто ссылкой на неё — буду благодарен.
навскидку в голову приходит два варианта: монорепозиторий или библиотеки. только библиотек или общих элементов будет по количеству языков, на которых пишутся микросервисы.
а в чем усложнение внесения правок в библиотеки? применяя версионирование можно существенно облегчить себе жизнь
а в чем усложнение внесения правок в библиотеки?
В том что все изменения нужно согласовывать с разными сервисами, то есть с разной кодовой базой и возможно разными людьми. Это сильно сложнее чем пробежаться по монолиту.
Вообще, если рассматривать классический подход к микросервисам, то между ними не должно быть разделяемого кода. Такой подход не всегда оправдан, часто удобнее все-таки часть кода сделать разделяемой. Как это будет реализовано — вопрос дискуссионный. Как вам кажется удобным для вашего кейса — так и делайте. И да, в любом случае такое разделение будет привносить дополнительное неудобство в разработку. Но микросервисы — это вообще не про удобство разработки, а про повышение гибкости системы в целом, возможности масштабирования отдельных ее частей. Дополнительная гибкость в любой системе всегда связана с дополнительной сложностью ее поддержки.
Если релиз включает интеграционное тестирование то никаких ограничений на это нет.
Тоже самое про переиспользование кода. Выделение пакетов или общий репозиторий решает эту проблему начисто.
Выделение пакетов помогает, но добавляет сложности с управлением версиями этих пакетов. Это не значит, что выделение пакетов плохо, но у подхода есть свои минусы.
создавайте кросс-функциональные команды
Часто под этим понимают «все отвечают за всё», а это уже вопрос совладения компанией, а не работа по найму. Мотивация совершенно другая.
Скрытые расходы при переходе на микросервисы