我已经开始学习和构建基于微服务的项目,但我总是陷入范围界定的境地,最终创建了一种单体应用。在我下面的 foo-bar 示例中,请建议范围应该是什么以及如何实现所需的输出。
服务或表
- 员工
- 部门
- 员工部门映射
假设
Employee
或 Department
之间没有任何交叉引用所有关系都在第 3 个表 Employee-Department-Mapping
中维护
关系可以是一对多
或多对多
,基于企业对企业,在这个例子中是一对多
(有员工的部门)
要求
我想明智地获得部门支付的总薪水。类似于下面的查询,这里我对 3 个表进行简单的连接。这只有在所有都在同一个数据库和单个微服务中时才有可能。
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
约束
- employee表有工资信息
- 员工部门关系由第3表维护。
我不是在寻找确切的答案,而是在寻找解决此类问题的方法。 想知道如果你需要聚合输出,你会如何设计你的微服务,你会把所有这些表放在一个微服务中吗?我不想从每个微服务中提取数百万条记录并在内存中进行聚合。
最佳答案
微服务边界 - 如果您没有任何其他可扩展性原因 - 应该由业务定义。在这种特殊情况下——在不知道任何其他要求的情况下——我会说你应该选择一个管理这两个实体的微服务。话虽如此,我有足够的经验知道在现实世界中这种解决方案并不总是可行和可能的。幸运的是,您可以遵循一些模式来解决您描述的情况。例如 CQRS 可能是一个解决方案 https://dzone.com/articles/microservices-with-cqrs-and-event-sourcing .
关于spring-boot - 定义微服务边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62001909/