большое приложение. Можно разбить его на отдельные компоненты, которые будут частью одного монолитного приложения но уровень изоляции будет как в микросервисах.
То-есть каждый компонент представляет из себя отдельный пакет (директорию с модулями) и имеет публичные методы которые принимают простые объекты (не члены класса, и без методов) или примитивные значения и возвращают такие же объекты или примитивные значения.
Таким образом, в отличие микросервисов, нет накладных расходов на создания нескольких процессов, http-запросов и сериализации/десериализации, но если проект потребуется разнести на несколько машин, переделать всё это в микросервисы будет легко. В идеале даже не придётся править код, только конфиг.
Кто что думает о моей идеи? Есть такое уже?
А разделение на разные компоненты это разве не есть микросервисы? А, понял.
как между собой будут модули взаимодействовать?
В моём понимании ключевое отличие в том что микросервисы это отдельные процессы, а под компонентами в данном случае подразумеваются просто разные директории в одном монолитном приложении
В монолитной версии - просто напрямую вызывая методы друг друга, как обычные модули. В микросервисной версии - через http и json. Но самое главное - метод для взаимодествия компонентов будет один, его поведение будет переключаться в конфиге
На картинке описана модульная архитектура. Любой nodejs-проект модульный, потому что каждый файл с кодом - это отдельный модуль
при разработке получается надо писать х2 тестов для двух видов коммуникации?
зависит от того как сделать. если в одном процессе данные передаваемые между микросервисами будут проходить сериализацию и десериализацию, то взаимодействие будет в точности такое же как и по сети. если же при запуске в одном процессе передавать объекты как есть то придётся писать код осторожно и относится к передаваемым объектам как к простым словарям
но а какой бенефит от того что можно переключатся? Я думал твоя изначальная идея в том чтоб делать монолит, но разбитый на сервисы, чтоб ускорить разработку на начальных этапах, и не тратить время на сопровождение каждого по отдельности. А потом разбить на микросервисы
главная идея в производительности. если всё крутится на одном сервере меньше накладных расходов если монолит, но когда мощностей одного сервера начинает не хватать - происходит разнос на разные сервера в виде микросервисов
ну, а потом микросервисы обратно в монолит зачем сворачивать?
а я и не говорил о том чтобы их обратно сворачивать, хотя, в принципе теоретически и это может быть полезно, если по каким-то причинам нагрузки снизятся или придётся продать сервера
Можешь почитать чистую архитектуру, там как раз эти идеи описаны
Профит на самом деле есть. В режиме разработки удобнее запускать все компоненты в одном процессе, на проде можно группировать в один процесс сервисы, которые часто общаются друг с другом
Обсуждают сегодня