Я начал изучать и строить проект на основе микросервисов, но я всегда останавливался в ситуации, связанной с определением объема работ, и в конечном итоге создавал своего рода монолит. в приведенном ниже примере с foo-bar предложите, какой должна быть область видимости и как достичь желаемого результата.
Услуги или таблицы
- Сотрудники
- Отдел
- Сотрудник-Отдел-Сопоставление
Допущение
Employee
или Department
не имеет перекрестных ссылок друг на друга, все отношения поддерживаются в 3-й таблице Employee-Department-Mapping
Связь может быть One-To-Many
или Many-To-Many
в зависимости от бизнеса, в этом примере это One-To-Many
(Отдел с сотрудником)
Требование
Я хочу получить общую зарплату, выплаченную отделу. аналогично приведенному ниже запросу, здесь я делаю простые соединения для трех таблиц. что возможно только в том случае, если все они находятся в одной базе данных и одной микросервисе.
Select d.DepartmentName, SUM(e.salary)
from Employee e, Department d, Employee-Department-Mapping c
where d.DepartmentName == c.DepartmentName
AND e.Employee == c.Employee
Group By c.DepatmentId
ограничения
- таблица сотрудников содержит информацию о зарплате
- отношения сотрудников и отдела поддерживаются третьей таблицей.
Я ищу не точный ответ, а подход к решению подобных проблем. Интересно, как бы вы спроектировали свой микросервис, если вам нужны агрегированные выходные данные, могли бы вы объединить все эти таблицы в одном микросервисе? Я не хочу извлекать миллионы записей из каждого микросервиса и выполнять агрегирование в памяти.