Konstantin
У меня вопрос, но не по Несту, а больше по микросервисам самим.
Паттерн говорить дб для каждого сервиса. Окей.
Есть вот сервис каталога товаров.
Есть сервис выполненных заказов.
Есть естественно сервис юзеров.
Нормально ли сервис выполненных заказов будет дергать сервис юзеров и сервис каталога? Тогда сервисы буду связанны? Это же анти паттерн.
Окей, можно использовать Реббит или Кафку и писать в базу заказов уникальных юзеров которые сделали заказ и уникалные товары которые были заказаны?
Паттерн где для одного сервиса - 1 база, распространён и имеет преимущество в виде возможности разнести нагрузку на базу, всегда одного ответственного за базу, но и имеет минусы:
- Необходимость управлять группой транзакций, если она затрагивает несколько сервисов
- Зависимости между микросервисами, которые сложно отследить.
- Не удобное использование данных для аналитики, так как они разнесены.
Для уменьшения связанности и управления транзакциями лучше всего использовать паттерн saga, где есть управляющий сервис, который оркестрирует микросервисы. Это может быть даже само API, но лучше делать отдельный сервис под конкретные доменные области, чтобы например управление заказами не замешивались с статьями для сайта.
Можно обойтись без управляющего сервиса, тогда саги нужно вносить внутрь самих сервисов и каждый инициализирует свою сагу.
Для обмена также рекомендую Kafka или RMQ (сам всегда использую RMQ). Главное увлекаясь микросервисами не сделать nano сервисы) Для этого советую почитать про DDD.