Конечно, возможно.
- Будет ли передача данных между ними медленной?
Да!Но по сравнению с чем?По сравнению с внутренними внутренними звонками, абсолютно - это будет ледниковым.По сравнению с другим сетевым API, не обязательно медленнее.
- Если я это сделаю, то каждое приложение / модуль должен быть HTTP-сервером, верно?Поэтому, если мое приложение использует 100 приложений / модулей, я должен иметь 100 локальных веб-серверов HTTP, каждый из которых работает с различным портом (http://localhost:81, http://localhost:82, http://localhost:83 и т. Д.)?
Нет, нет причин выделять порт для модуля.Все виды способов сделать это.
- Есть ли какие-либо передовые практики / хит-парады, о которых я должен знать?
Единственный способ добиться успеха - это если те службы, о которых вы говоритео достаточно грубы.Это должны быть сервисы большого размера, которые стоят того, чтобы их называть стоящими.Вы будете нести расходы на подключение, расходы на передачу данных и стоимость маршалинга данных для каждой транзакции.Итак, вы хотите, чтобы эти транзакции были настолько редкими, насколько это возможно, и вы хотите, чтобы полезные нагрузки были как можно больше, чтобы получить максимальную выгоду.
Вы говорите, на самом деле, используете архитектуру REST или просто отправляете вещи назад ивперед через HTTP?(Это разные вещи) REST несет свои собственные расходы, включая встроенные связи, вездесущие и распространенные типы данных и т. Д.
Наконец, вам просто может не понадобиться это делать.Это может быть «круто», «приятно иметь», «хорошо выглядит на белой доске», но если это действительно не нужно, то не делайте этого.Просто следуйте рекомендациям по изоляции ваших внутренних сервисов, чтобы, если позже вы решите сделать что-то подобное, вы можете просто вставить слой клея, необходимый для управления связью и т. Д. Добавление удаленного распределения увеличит риск, сложность и снизит производительность (масштабирование! = производительность) поэтому должна быть веская причина, чтобы сделать это вообще.
Это, пожалуй, «лучшая практика» для всех них.
Редактировать - Ответ на комментарий:
То есть вы имеете в виду, что я запускаю ОДИН веб-серверчто обрабатывать все входящие запросы?Но тогда модули не будут автономными приложениями, что наносит ущерб всей цели.Я хочу, чтобы каждый из модулей мог запускаться сам по себе.
Нет, это не противоречит цели.
Вот сделка.
Допустим, у вас есть 3 услуги.
На первый взгляд, было бы справедливо сказать, что это три разных сервиса на 3 разных машинах, работающих на 3 разных веб-серверах.
Но правда в том,что все они могут быть запущены на одной и той же машине, на том же веб-сервере, вплоть до (чтобы довести это до крайности) выполнения точно такой же логики.
HTTP позволяет вам отображать все виды вещей.HTTP сам по себе является механизмом абстракции.
В качестве клиента все, что вам нужно, это URL-адрес для использования и полезная нагрузка для отправки.С какой машиной он в конечном итоге разговаривает или какой код выполняет, а не с клиентами.
На уровне архитектуры вы достигли способа абстрагирования и модульности.URL-адреса позволяют организовать вашу систему в соответствии с тем, какой макет LOGICAL вы хотите.Реализация PHYSICAL отличается от логического представления.
Эти 3 службы могут работать на одной машине, обслуживаемой одним процессом.С другой стороны, они могут представлять 1000 машин.Как вы думаете, сколько компьютеров отвечает на «www.google.com»?
Вы можете легко разместить все 3 службы на одном компьютере без совместного использования кода, кроме самого веб-сервера.Упрощение перемещения службы с ее исходного компьютера на другой.
Имя хоста - это самый простой способ привязать сервис к машине.Любой современный веб-сервер может обслуживать любое количество разных хостов.Каждый «виртуальный хост» может обслуживать любое количество отдельных конечных точек службы в пространстве имен этого хоста.На уровне «хоста» тривиально переместить код с одного компьютера на другой, если и когда это необходимо.
Вам следует больше изучить возможности современного веб-сервера для направления произвольных запросов в реальную логику на сервере,Вы найдете их очень гибкими.