Как правильно разделять приложение node js на микросервисы?

Как правильно разделять приложение node js на микросервисы?
Использую express 4
Есть ли смысл выносить например чат или же любую другую часть, логика которой отличается от основного приложения - в отдельное нодовское приложение?
Как в таком случае осуществлять общение между приложениями (http запросами сейчас у меня реализовано)
  • Вопрос задан
  • 8392 просмотра
Пригласить эксперта
Ответы на вопрос 4
VGrabko
@VGrabko
Golang, Php, Js
Ну вообще обычно есть "точка входа" которая имеет публичный Api и занята она проксирование запросов к микросервисам.

По поводу протокола.
Я юзаю Go и думаю что тоже подойдёт к любому ЯП.

У меня между микросервисами сделано подобие json RPC по верх TCP и UNIX SOCKET. Второе сделано на случей если микросервисы на том же сервере и каждый микросервис слушает как tcp так и unix socket.

Обычно каждый модуль выносят в микросервис (а-ля Авторизация, Чат, Отправка EMAIL и т.д.)
Ответ написан
Комментировать
saDam
@saDam
Microservices, .NET Core, EF Core, SQL, RabbitMQ,
Попробуйте почитать тут:
Очень годное руководство по микросервисам: https://www.nginx.com/blog/introduction-to-microse...
node.js: codewinds.com/blog/2015-11-14-microservices-nodeve... (https://github.com/jeffbski/microservices)
Ответ написан
Комментировать
@AntoXa_ZiMM
I just write code and do not know English
Думаю, что node.js вполне может использовать общие принципы микросервисной архитектуры, реализация зависит от фантазии и опыта.
По опыту проекта социальнй сети на микросервисах и шины сообщений:
Небольшой кусочек логики выносится в несколько микросервисов, для этого куска логики обычно легко создать схему в БД(обычно 1-4 таблицы) и запретить другим сервисам доступ к этой схеме. Если сервис (или несколько) написан правильно, то он легко может быть перенесен с одно сайта на другой без лишних проблем с интегрцией.
Сервисы можно разделить на разные типы:
  • "CRUD микросервис" с бизнес логикой и работающий с БД, может запросить данные у других микросервисов (например баланс счета пользователя или разрешение на выполнение какой-то операции), может отправить инфурмацию о сделанной работе (например сохранил сообщение чата в БД -- отправь инфу, что сообщение сохранение)
  • "Маршрутизаторы сообщений" читают из очереди сообщения, иногда запрашивают данные у других микросервисов, переписывают/дописывают сообщения и пересылают по другим адресам или блокируют отправку сообщений далее (например пользователя можно информировать отправкой письма или push нотификацией т.к. пользователь пользуется только приложением)
  • "Таймеры" получают сообщение из очереди, на основании конфигурации создают таймер и потом пересылают сообщение по другому адресу (например у пользователя подписка на месяц и через 3 недели нужно информировать его о завершении)

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

По требованиям, что стояли предо мной, мне нужно было создать проекты в которых есть админка SPA (Single page application), есть API, и есть публичная часть (front, морда) которая для одного проекта может быть SPA, для другого чисто монолит с рендерингом вьюшек.

В итоге получилось такая вот основа - https://github.com/DangelZM/simplicitjs Сейчас нет времени как то дорабатывать. Но мне для старта небольших проектов с админками пригодилось.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы