От переводчика: во время технических презентаций нашей технологии – платформы быстрой разработки Jmix – мы, как правило, доходим до вопроса архитектуры создаваемых приложений и часто встречаем грусть в глазах разработчиков, когда сообщаем, что создаваемое приложение имеет монолитную архитектуру. Удивительно, но случается, что команды разработки приложений на Delphi или Oraсle EBS непременно заинтересованы в реализации микросервисной архитектуры, отождествляя ее с чем-то очень современным и самым продвинутым. К счастью, хайп вокруг микросервисов постепенно начал замещаться новой информационной повесткой о необходимости рационального использования ресурсов и выбора типа архитектуры приложений на основе компетенций команд разработчиков и масштабов создаваемого решения. В Jmix есть все необходимое, чтобы создавать современные корпоративные информационные системы в рекордные сроки и с минимальными затратами. Мы понимаем, что монолитная архитектура приложений Jmix не может закрыть все кейсы, но мы верим, что для каждой задачи есть подходящий инструмент. Прочитайте перевод статьи из блога Camunda, возможно, она поможет понять какой тип архитектуры подходит для вашего проекта, чтобы сэкономить время, деньги и нервы.
В статье поговорим об отличиях микросервисной архитектуры от монолитной и разберемся, что лучше подойдет для вашего следующего проекта.
Выбор правильной архитектуры приложения – залог его успеха в будущем. К счастью для вас, в данной статье мы сравним два популярных и крайне действенных подхода – монолитную и микросервисную архитектуру.
Далее мы обсудим сильные и слабые стороны каждой архитектуры. А после прочтения статьи вы будете четко понимать, когда и что лучше выбрать.
Итак, будь вы опытным архитектором или любознательным разработчиком, давайте поговорим об отличиях монолитов от микросервисов, чтобы вы могли выбрать свое идеальное решение для следующего проекта!
Монолитная архитектура
Начнем с традиционной монолитной архитектуры. Представьте себе единую и прочную структуру, в которой все компоненты приложения крепко связаны между собой. Она похожа на большой старинный замок, в стенах которого есть все необходимое.
А, например, в контексте веб-приложений мы говорим о том, что клиентский и серверный код находятся внутри одного проекта. Копнув еще глубже, оказывается, что серверный код – это вообще часть того же процесса.
И, чтобы все стало еще более понятным, давайте рассмотрим плюсы и минусы монолитов.
В чем плюсы монолитного подхода?
Главный плюс монолитов – их простота и легкость разработки. Компоненты монолитной системы тесно связаны, поэтому писать и тестировать такой код сравнительно легко. Вы поддерживаете единую базу кода, и это упрощает понимание общей логики приложения.
К явным достоинствам монолитной архитектуры относятся производительность и эффективность. Поскольку все компоненты выполняются в рамках одного процесса, отпадает нужда в межпроцессном взаимодействии. То есть, более быстрое время выполнения и минимальные временные затраты (мы еще к этому вернемся).
И еще один плюс монолитов – среда совместно используемых данных. У всех компонентов есть прямой доступ к той же базе данных, что позволяет беспрепятственно обмениваться этими данными. Тем самым устраняется необходимость в сложных механизмах синхронизации.
В чем минусы монолитной архитектуры?
Пока что монолиты кажутся на удивление достойным решением. Но, к сожалению, здесь есть свои недочеты. В монолитной архитектуре хватает изъянов.
Один из них – масштабирование. Масштабировать монолиты не так уж просто, ведь все приложение масштабируется как единое целое. В итоге, если дополнительные ресурсы нужны только для определенных компонентов, это может вылиться в их нерациональное использование.
Помните, как выше мы говорили о том, что один из плюсов монолитов – внутренняя производительность? В этом же заключается и их головная боль. Ведь, если подумать, весь монолит потребляет ресурсы сервера, на котором работает (будь то выделенный сервер, виртуальная машина и что-то еще). А если у вас есть сложный продукт с множеством опций, то вся система начнет хромать, когда для работы одной из таких функций потребуются дополнительные ресурсы. Представьте себе ситуацию: пользователь загрузил большой файл, который нужно обработать. И это внезапно сказалось на процессе входа. Пользовательский опыт в данном случае будет просто ужасным.
Более того, монолиты часто «завязаны» на определенном стеке технологий. И добавление новых технологий или фреймворков чревато перепроектированием всего приложения. Такое скудное технологическое разнообразие ограничивает ваши возможности и замедляет дальнее развитие приложения (вы когда-нибудь пробовали поддерживать 10-летнего монолита? Конечно же, там вы не найдете ни намека на код React или Next JS).
Что до развертывания и обслуживания, то монолитные архитектуры – слегка громоздкие. Любые изменения или обновления требуют повторного развертывания всего приложения, и это ведет к увеличению времени простоя и возможным сбоям.
Итого: монолитная архитектура предлагает простоту и эффективность; в ней используется единая база кода и общие данных. Но в монолитах отмечаются явные проблемы с масштабируемостью, развертыванием/обслуживанием, а также ограниченное технологическое разнообразие.
Считать ли монолитную архитектуру – худшим техническим решением из когда-либо придуманных? Конечно же, нет! Для них есть свои области использования, о которых мы и поговорим далее.
А теперь давайте разберемся, что такое микросервисы, в чем их плюсы и минусы.
Микросервисная архитектура
Сменим тему и окунемся в мир микросервисной архитектуры. Представьте себе современный город с множеством обособленных зданий, каждое из которых используется для определенной цели. В этом и заключается суть микросервисов – они разбивают приложения на более мелкие автономные сервисы, которые взаимодействуют друг с другом. Если вернуться к тому же примеру с монолитами, то все население вашего города будет находиться внутри одного гигантского здания, в котором каждый человек живет, работает и совершает покупки.
В чем плюсы микросервисной архитектуры?
В микросервисной архитектуре есть множество плюсов, которые привлекли внимание разработчиков по всему миру.
Одним из главных преимуществ данной архитектуры служит масштабируемость и гибкость. Каждый микросервис можно масштабировать независимо от других, исходя от его конкретных потребностей. Такая детализированная масштабируемость позволяет эффективно распределять ресурсы и обеспечивает оптимальную производительность, особенно при работе с меняющимися требованиями к рабочей нагрузке.
Также для микросервисов характерно технологическое разнообразие и автономия. Каждый сервис работает обособленно, так что можно подобрать для него разные технологии и фреймворки – если только их интерфейсы не зависят от технологий (например, используют HTTP API или веб-сокеты). Это открывает целый мир возможностей и позволяет командам выбирать лучшие инструменты для реализации конкретных задач. Микросервисы похожи на динамичную экосистему, в которой каждый сервис может эволюционировать и улучшаться в собственном темпе.
Непрерывная доставка и развертывание – еще одни важные плюсы микросервисной архитектуры. Сервисы не имеют привязки друг к другу, благодаря чему их можно разрабатывать, тестировать и развертывать обособленно. Это сокращает срок вывода на рынок, ведь новые функции и обновления можно развертывать без изменения всего приложения. У вас как будто есть целый гибкий набор сервисов, готовых адаптироваться и улучшаться в любое время. Кроме того, все это позволяет работать над каждым микросервисом сразу нескольким командам, благодаря чему существенно ускоряется время разработки.
В целом, микросервисы – довольно удобные и продуманные. Но, как и везде в нашей отрасли, какой бы гениальной технология не была, ей никогда не стать эталоном. В микросервисах есть ряд существенных недочетов, о которых необходимо знать.
В чем минусы микросервисов?
В свободе и гибкости микросервисов есть и обратная сторона.
Одним из недочетов микросервисной архитектуры являются сложности с управлением распределенной системой. Для координации взаимодействия между сервисами, обеспечения согласованности данных и обработки сбоев необходимо скрупулезное проектирование и внедрение. Ведь, по сути, если у вас есть множество микросервисов, то им же нужно как-то обращаться между собой, обмениваться данными… а как быть, если один из них вдруг выйдет из строя? Как восстановить после этого другие сервисы? Где каждый сервис будет хранить свои данные? Все эти вопросы необходимо задать себе до запуска продукта. А теперь представьте, что у вас есть 30 микросервисов… или даже 100 (причем для крупных систем это не так уж и много). Сможете ли вы ответить на все эти вопросы по каждому сервису?
Теперь понимаете, в чем дело?
Также следует учитывать издержки на координацию и взаимодействие процессов. Чем больше сервисов становится, тем сложнее поддерживать их взаимодействие и согласованность данных. Получается, что для реализации эффективных процессов взаимодействия нужны дополнительные средства (например, API или очереди сообщений).
Итого: микросервисная архитектура может похвастаться масштабируемостью, технологическим разнообразием и непрерывной доставкой. Однако все это сопряжено с рядом трудностей, связанных со сложностью этой архитектуры, распределенными системами и взаимодействием между сервисами.
Сравнение монолитной и микросервисной архитектуры
Для краткого и наглядного анализа давайте сравним монолитную и микросервисную архитектуру по пунктам. Так мы сразу увидим различия в каких-то аспектах.
То, какой вариант вы выберете, зависит от множества факторов, включая требования к проекту, опыт команды и потребность в масштабируемости. Таблица выше поможет вам понять плюсы и минусы двух подходов.
Выбор монолитной или микросервисной архитектуры
Теперь вы разобрались в двух сторонах одной архитектурной медали. Единственное, что осталось, – это сделать правильный выбор. Опять же, задача не самая простая. И прежде, чем сделать выбор, необходимо учесть множество факторов. Поэтому мы быстро рассмотрим несколько примеров использования каждой архитектуры, и вы увидите, где и что лучше подойдет.
Популярные примеры использования монолитной архитектуры
Для начала рассмотрим несколько примеров удачного выбора монолитной архитектуры:
Приложения для малого и среднего бизнеса. Сравнительно простым приложениям с ограниченным функционалом и небольшими командами разработки монолитная архитектура может предложить понятное и демократичное решение. Простота единой базы кода и среда совместно используемых данных может ускорить процессы разработки и обслуживания.
Проекты прототипирования и проверки концепции (proof-of-concept или PoC). Когда проект находится на ранних этапах, а вы хотите быстро проверить идеи или протестировать концепции, то практичнее будет обратиться к монолитам. Простота такой архитектуры позволяет использовать быстрые этапы разработки, помогая вам эффективно разбивать процесс на части и собирать обратную связь. Нет нужды выстраивать полноценную масштабируемую и гибкую PoC-систему. В ней вы будете тратить время на решение проблем, не связанных с самой концепцией, которую хотите доказать.
Среды с ограниченными ресурсами. Монолитная архитектура может стать хорошим решение для определенных сред с ограниченными ресурсами инфраструктуры или возможностями развертывания. Для работы такой системы требуется меньше ресурсов (по сравнению с установкой распределенного микросервиса), так что она лучше подходит для сред с аппаратными или финансовыми ограничениями.
Приложения одной функции. Приложения, выполняющие одну четко определенную функцию без сложной интеграции или существенных требований к масштабируемости, только выиграют от монолитной архитектуры. Все приложение работает в рамках единого процесса, и монолиты могут обеспечить эффективную производительность для такого рода узконаправленных задач. Кроме того, если вам потребуется масштабировать систему, то вы можете просто добавить больше реплик монолита под подсистему балансировки нагрузок, и, тем самым, решить эту проблему.
Унаследованные системы (Legacy-системы). Модернизация и миграция унаследованных систем – задача весьма сложная. В ряде случаев практичнее будет сохранить существующую монолитную архитектуру и постепенно провести рефакторинг системы, либо же добавить в нужные места микросервисы. В данном подходе вы осуществляете поэтапный переход, сводя к минимуму сбои и эффективно пользуясь существующей кодовой базой.
Помните, что здесь приведено лишь несколько примеров. А решение о том, подходит вам монолитная архитектура или нет, зависит от конкретных условий вашего проекта. В процессе принятия решения вам поможет оценка следующих факторов: размер проекта, сложность, потребности в масштабируемости, ограничения ресурсов
Популярные примеры использования микросервисной архитектуры
Микросервисная архитектура предлагает множество достоинств, из-за чего в ряде случаев кажется весьма привлекательным выбором. Давайте рассмотрим несколько примеров, в которых удачно вписались микросервисы:
Крупные и сложные системы. Микросервисы – это настоящая находка при работе с крупномасштабными приложениями со сложным функционалом. Разбивка системы на более мелкие и независимые сервисы помогает в качественной организации, обслуживании и масштабируемости. Каждый сервис может заниматься определенными бизнес-возможностями, что делает разработку и обслуживание более легкими в управлении.
Высокая масштабируемость и эластичность. Приложения с непостоянными или непредвиденными рабочими нагрузками гарантированно выиграют от использования микросервисов. Детализированная масштабируемость позволяет масштабировать каждый сервис по отдельности, исходя из ваших конкретных требований. Это гарантирует эффективное использование ресурсов. Вы можете выделять ресурсы именно там, где они нужны, обеспечивая, тем самым, оптимальную производительность и экономичность.
Технологическая разнородность. Если для компонентов проекта нужны разные технологии или фреймворки, то гибкость микросервисов поможет вам это реализовать. Каждый сервис можно создавать на том стеке технологий, который лучше всего подойдет под его конкретные требования. Получается, что команды разработки могут пользоваться сильными сторонами различных технологий и подбирать идеальные инструменты для работы.
Непрерывное развертывание и культура DevOps. Микросервисы отлично согласуются с принципами непрерывной интеграции, доставки и развертывания. Дело в том, что каждый сервис можно разрабатывать, тестировать и развертывать отдельно от остальных, что позволяет быстрее проходить все этапы работы и ускоряет выход продукта на рынок. Данный подход поддерживает гибкую и ориентированную на DevOps культуру разработки, способствуя более частому и быстрому выходу релизов.
Предметно-ориентированное проектирование. Приложениям со сложными моделями предметной области и своим собственными ограниченным контекстом также подходят микросервисы. Соотнося сервисы с определенными подобластями, вы сможете добиться более качественного распределения обязанностей, инкапсуляции и масштабируемости. Такая модель поддерживает модульный подход, в котором каждый микросервис занимается определенными бизнес возможностями и развивается обособленно.
Важно помнить, что микросервисы, хоть и обладают множеством достоинств, все равно сопряжены с дополнительными сложностями. Для принятия правильного решения учитывайте следующие факторы: размер проекта, потребность в масштабируемости, опыт команды, а также способность справиться с операционными издержками, которые связаны с распределенной системой.
Микросервисы и монолиты. Что лучше?
Как, вы, наверное, уже догадались, ответом на вопрос: «Какая архитектура лучше: микросервисы или монолиты?» будет: и та, и другая. Обе хороши и плохи.
Понимаю, звучит не очень. Но задавать такой вопрос – это уже неправильный подход. Наоборот, лучше спросите себя: «Какая архитектура (монолит или микросервис) лучше подойдет моему проекту?»
И даже в этом случае ответом будет: «Надо смотреть по ситуации».
Выбрать правильную архитектуру для своего приложения крайне важно. Мы сравнили монолитную и микросервисную архитектуру, а также разобрали их плюсы и минусы.
Для монолитной архитектуры характерна простота, эффективность и среда совместно используемых данных. С другой стороны, у микросервисов есть масштабируемость, гибкость и технологическое разнообразие.
Принимая решение, рассмотрите все аспекты. И такие факторы, как размер проекта, сложность, потребность в масштабируемости, опыт команды и даже ограничения по развертыванию. Все это крайне важно и актуально. Стремитесь найти баланс между плюсами и минусами каждой архитектуры.
Помните, что в вопросах архитектуры ПО идеального решения нет. Правильная архитектура зависит от ваших конкретных требований к проекту и организационному контексту. Изучите этот вопрос, оцените все плюсы и минусы и выберите тот подход, который соответствует вашим долгосрочным целям.
Удачи на вашем пути в мир архитектуры!
Комментарии (17)
Politura
04.09.2023 14:34Жаль, что опять не упомянута проблема монолитов наиболее сильно толкающая людей к его распиливанию его на части.
Это замедление процесса разработки. Когда надо десятки минут на сборку проекта и несколько часов на прогон всех тестов. Когда багофикс, который ты сделал за пол часа растягивается не несколько часов, а то и дней, ибо прежде чем делать PR, надо протестить изменения локально, а значит локально все поднять, и пусть процесс как правило автоматизирован, но занимает много времени. Ок, все работает делаем PR. Даже если его быстро отревьюили, надо ждать часы, пока ваш CI его соберет, прогонит все юнит тесты, развернет, прогонят базовые интеграционные тесты, только после этого его можно будет замержить. И на смотря на такую строгость не понимаю как, но периодически сборка, или тесты ломаются из-за изменений замерерженных часом раньше. Сидишь ждешь, пока их пофиксят, потом мержишься с последним мастером, проверяешь, что все работает, просишь ревьюверов отптичить PR, ибо изменений не было.
Это багофикс. Какие-нибудь большие изменения, на 15+ файлов отдельная головная боль. Ибо никто не любит ревьюить большие PR-ы. И если в своей команде найти ревьюверов все еще легко, но большие изменения часто залазят в область владения других команд и тут может не повезти. Плюс, чем дольше PR висит, тем больше шансов, что автомерж не сработает, надо мержить последние изменения в свой PR вручную.
Сейчас, конечно, придут разные люди и расскажут как правильно надо делать монолиты, что дизайн кривой и надо много репозиториев, а не монорепозиторий, но на практике в разных конторах я видел именно эти проблемы, толкающие людей уходить от монолитов.
Leetc0deMonkey
04.09.2023 14:34+6Сейчас, конечно, придут разные люди и расскажут как правильно надо делать монолиты, что дизайн кривой и надо много репозиториев, а не монорепозиторий, но на практике в разных конторах я видел именно эти проблемы, толкающие людей уходить от монолитов.
Но так и есть - дизайн кривой. Распилите монолит на модули, и не нужны никакие микросервисы с их проблемами.
Politura
04.09.2023 14:34+1Угу, вот только все монолиты, что я видел, были модульные. Однако модули все также лежат в одном репозитории. И хоть ты сам обычно тестишь только свои изменения перед тем как сделать PR, Дженкинс, или какой там аналог его используется, будет прогонять все тесты для всего монолита, прежде чем дать тебе замержить. Было бы интересно узнать о тех, у кого монолит лежит по разным репозиториям и для мержа не надо прогонять все тесты по всему монолиту.
Однако в целом я считаю, что в большинстве случаев начинать стоит с монолита, ибо бенефитов от монолита пока он маленький больше чем от микросервисов. Просто надо держать в голове, что монолиты имеют тенденцию расти, что с годами превращается в проблему.
bondeg
04.09.2023 14:34Неплохой вариант - прогонять все тесты затронутых неймспейсов.
Вообще все тесты прогонять уже в фоне.
Leetc0deMonkey
04.09.2023 14:34Просто надо держать в голове, что монолиты имеют тенденцию расти, что с годами превращается в проблему.
У кого это превращается в проблему? Профессиональной разработке ПО полвека и больше. За эти годы написаны системы управления критическими производствами, банковские системы. И тут пришла молодёжь, и написание интернет-магазина у них превратилось в проблему?
Politura
04.09.2023 14:34Не знаю на счет интернет магазинов, если у них репозитории огромные с большой кодовой базой, то вероятно тоже могут иметь подобные проблемы. А вот онлайн банкинг, которым сейчас пользуются сотни кредит юрионов а США как-раз имеет в основе монолит с вышеописанными проблемами, я это знаю точно, ибо сам не один год с ним проработал.
Еще раз. Проблемы замедления разработки, что я привел, зависят в первую очередь от размера репозитория и количества вовлеченных человек. Не от того, насколько идеальная архитектура. Вот сейчас глянул монолит с которого списывал проблему и от которого уже несколько лет отрезают кусочки: за последний месяц было замержено 480 пул реквестов от 118 человек и это август - период отпусков у кучи народа. Еслиб каждая команда из этих 118 человек сидела бы в своем изолированном репозитории - замерженных пул реквестов было-бы в несколько раз больше.
Подобные проблемы вообще не проблемы монолита, а любого крупного проекта. Лет десять назад я какоето время работал фулл-тайм контрибьютором в LLVM, когда у него репозиторий еще был в svn, вот там на любые изменения уходило очень много времени, ибо мало того, что только сборка идет час, так надо было проверять на куче разных физических устройств с разными архитектурами (и собирать тоже под них). Проверил, все нормально, твои изменения отревьюены и одобрены, закоммитил, а на следующий день к тебе пишет Крис Латтнер, мол ты знаешь, я ревертнул твой коммит, тк на наших внутренних тестовых окружениях в Эпле, такие-то тесты упали. Пустить к энвам мы тебя не можем, ибо nda, но вот дать тексты ошибок и стектрейсы можем. И что-то мне подсказывает, все эти проблемы у них там сейчас все также есть.
aleksey-stukalov
04.09.2023 14:34Все микросервисы которые я вижу в последнее время тоже лежат в монорепе.
Politura
04.09.2023 14:34Я подобное видел только в одном стартапе, где одна команда занималась всем проектом и выбрала делать его на микросервисах просто из-за внутренних хотелок, а не каких-то реальных оснований. Тому проекту микросервисы были просто не нужны. Полагаю, что небольшие конторы с одной-двумя командами могут так делать.
В крупных конторах, которые наелись проблем и с микросервисами, и с монолитами, обычно жизнь любого сервиса, хоть мико, хоть макро, начинается с регистрации его на девпортале. При этом портал сам сгенерирует для него новый репозиторий.
MyraJKee
04.09.2023 14:34Это в идеальном мире монолит распиленный на модули имеет приемлемую связанность. Код придерживается принципов solid и т.д.
В жизни обычно все по другому ) особенно когда проходит n времени и монолит проходит через n людей
Leetc0deMonkey
04.09.2023 14:34+3Так и с микросервисами то же самое. Пройдёт n лет и пройдут они через n людей, и новое поколение точно также будет плеваться что за свалка говна и палок, надо срочно всё переписывать на монолит (под другим маркетинговым названием)!
vfadeev_sam
04.09.2023 14:34В статье хотели сделать акцент на проверку соответствия возможностей команды и планируемой архитектуре. Разговор не о том, что у микросервисов и монолитов нет проблем - везде есть свои за и против. Просто в определенном классе задач, приведенном в статье, монолит более эффективен, чем микросервисы. И конкретно при миграции легаси приложений монолит почти всегда выйгрывает. Согласны?
bondeg
04.09.2023 14:34+2"оптимальное распределение ресурсов" - вот тут или я не понял или это не совсем верно. Т.к. наверняка многие микросервисы породят отдельные запросы данных, которые в монолите были бы получены всего 1 раз. А если ещё и кеши этих данных имеются разные, то можем получить вообще весёлое поведение.
revoitic
04.09.2023 14:34+2Я работал на проекте, который представлял из себя "микросервисный монолит". Это было соединение всех минусов с двух сторон. Фактически просто все библиотеки вызывались по http, сервисы делились по случайному признаку.
Думаю, что если правильно приготовить монолит (можно дополнительно разделить монолит по доменам), то микросевисы станут сильно менее полезными. А вот если микросервисы сделать неудачно, то это похоронит проект.
Batalmv
04.09.2023 14:34Я думаю, первое реальное отличие монолита от микросервисов - это CI/CD. Ну чисто физически, если монолит - это один war-ник условно, то как вы братцы не садитесь, чтобы что-то попробовать его надо собрать и поднять где-то. При распределенной команде задача собрать "логический" конфиг, который состоит из измененной фичи "А", написанной разрабом X и фичи "Б", написанной разрабом Y на версии 123 на микросервисах решить намного легче, чем на монолите. Более того, каждый разраб, в целом, может даже локально собрать себе такой конфиг, или гибридно: что-то крутится у себя, то что правил сам, а что-то в общей "работоспособной" среде. Это просто следует из того, что монолит один, а микросервисы - это много.
Второе отличие - у микросервисов будет "интеграционный слой", в котором будет как-то реализовано общение микросервисов. В монолите это также может быть, но спрятано от посторонних глаз :)
Все остальное в реальности зависит от кривизны рук команды, а не от архитектуры.
Масштабирование - весьма условная вещь, если все это в конечном итоге живете на ограниченном пуле физических ресурсов. Все эта танцы с бубном не имеют никакого значения, если вы уперлись в полку CPU. В статье упомянут кейс, когда малозначимая функция может сожрать все ресурсы и спровоцировать "падение" всей системы - да, есть есть. Но есть и обратная сторона медали - заниматься масштабированием пипеткой, когда у тебя 100 сервисов тоже сложно. Т.е. это если наперед знать, что там проблема, то можно быстро пофиксить. А так чуда нет. К примеру, 10 сервисов, 4 ядра. Всем дали все. Один "плохой" сервис занял 4 ядра - система умерла. А-а-а, плохо. Выдали всем лимит, не больше одного ядра в одни руки. Тогда другой "хороший" сервис взял одно ядро и умер, потому что ему объективно надо больше. Следующая итерация. Хорошему сервису можно два ядра, остальным - одно. И так до победного конца. В реале с монолитом легко достичь того же самого, так как можно на балансере наверху развести сервисы по нодам и важности. Условно "хорошие" сервисы живут на всех нодах, а "плохие" - на двух. Так как в реальной жизни не требуется так детально масштабировать каждый сервис и достаточно сформировать пулы эквивалентных сервисов.
Время установки: да нет никакой разницы. В реальной жизни любое приложение живет на куче нод, и несложно накатывать изменения понодово, сведя время даунтайма к нулю.
--------------
Я бы исходил в первую очередь из процеса разработки. Если микросервисы ускорят процесс - давайте заплатим цену за доп. интеграционный слой. Если нет - можно не усложнять, так как одной "единицей" оперировать инонгда проще, чем 100.
Leetc0deMonkey
Data Store это такой же [микро]сервис, со своим протоколом взаимодействия.
Даже во времена когда про микросервисы никто не говорил, писались распределённые приложения, где обособленный функционал вызывался по DCOM [и MSMQ].