spring-boot - 定义微服务边界

标签 spring-boot architecture microservices

我已经开始学习和构建基于微服务的项目,但我总是陷入范围界定的境地,最终创建了一种单体应用。在我下面的 foo-bar 示例中,请建议范围应该是什么以及如何实现所需的输出。

服务或表

  • 员工
  • 部门
  • 员工部门映射

假设

EmployeeDepartment 之间没有任何交叉引用所有关系都在第 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/

相关文章:

testing - spring-boot-starter-test无法运行数据库集成测试

java - Junit5 Mockito @InjecctMocks 不适用于 MockMvc

ios - 两个具有相似功能的 View Controller VIPER

.net - Azure 响应队列管理

microservices - Netflix-Zuul 与 Mashape-Kong

design-patterns - 跨微服务的数据一致性

java - 如果我的库也可能有带有我不知道的 Order 注释的 ControllerAdvices,我应该在 ControllerAdvice 上使用什么 order 值?

java - Spring Boot Maven 插件 - 没有 BOOT-INF 目录

oop - 方法 JavaFx TreeItem getRoot() 不可见。它不是 OOP/MVC 的原因是什么?

architecture - 前端还是后端调用微服务?