Стоит ли разделять базы данных между микросервисами?

Есть к примеру 10 микросервисов, по логике у каждого микросервиса своя база данных. Но вот возникает ситуация в которой нужно получить запись из базы по опеределенным притериям и тут мы сели в лужу, все эти данные в разных базах в разных сервисах, и нам приходиться их агрегировать через прослойки, вместо обычного JOIN QUERY в базу, мы что-то делаем не так или это издержки микросервисной архитектуры? Логично ли все базы свести в одну и из разных сервисов дерать инфу на прямую, а все сервисы подключать к одной базе?
  • Вопрос задан
  • 420 просмотров
Решения вопроса 1
@skrimafonolog
микросервисы - это для горизонтального масштабирования.
то есть когда при увеличении нагрузки - вы увеличивайте количество серверов.

ну а теперь подумайте, что будет с вашей базой данных, когда серверов с микросервисами у вас будет много, скажем 1000, а БД будет одна-единственная?

будет затык, то есть весь смысл горизонтального масштабирования теряется.

для микросервисов целесообразно использовать - своя БД для каждого.
а в качестве единой связующей между ними - использовать MQ.

Но вот возникает ситуация в которой нужно получить запись из базы по опеределенным притериям и тут мы сели в лужу, все эти данные в разных базах в разных сервисах, и нам приходиться их агрегировать через прослойки, вместо обычного JOIN QUERY в базу, мы что-то делаем не так или это издержки микросервисной архитектуры?


если это происходит часто, то значит вы некорректно побили на микросервисы.
они недостаточно изолированы по функционалу.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
angrySCV
@angrySCV
machine learning, programming, startuping
>Логично ли все базы свести в одну и из разных сервисов
это логично только когда не корректно провели декомпозицию функционала и пытаются просто нарезать один сервис на разные части с единой базой,
для разных микросервисов это не должно быть логичным.
например у ресторана в сервисе "доставки блюд" и в сервисе "оформления блюда", есть и там и там "клиент", но данные этого клиента в обоих сервисах разные.
в доставке у "клиента" есть ФИО и адрес,
в оформлении блюд на выдачу в ресторане, у клиента ни адреса и ни фио (просто клиент №1 например), но есть например номер столика и тд
для обоих этих микросервисов источники данных разные.
Ответ написан
inoise
@inoise
Solutions Architect, AWS Certified, Serverless
Если стоит проблема ТОЛЬКО в получении и агрегации данных то:
1. Вы еще не познали всей боли)
2. данный вопрос решается GraphQL, предназначенный именно для этого

А базы разделять надо. В этом же суть
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Тип хранилища зависит от типа и назначения данных.
1. Если данные для микросервисов разные (разнородные) - это топология "кольцо" + централизованное API.
2. Если одинаковые - это топология "звезда" (т.е. обычная централизованная БД).
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
22 окт. 2019, в 21:26
7000 руб./за проект
22 окт. 2019, в 20:50
4000 руб./за проект
22 окт. 2019, в 19:50
10000 руб./за проект