Spring boot 定义微服务边界

Spring boot 定义微服务边界,spring-boot,architecture,microservices,Spring Boot,Architecture,Microservices,我已经开始学习和构建基于微服务的项目,但我总是陷入范围界定的境地,最终创建了一个整体。在我下面的foo-bar示例中,请建议范围应该是什么以及如何实现所需的输出 服务或表格 雇员 系 员工部门映射 假设 Employee或Department彼此之间没有任何交叉引用所有关系都在第三个表Employee-Department映射中维护 基于企业对企业的关系可以是一对多或多对多,在本例中是一对多(有员工的部门) 要求 我想从部门的角度得到工资总额。与下面的查询类似,我在这里对3个表进行简单连接。

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

服务或表格

  • 雇员
  • 员工部门映射
假设

Employee
Department
彼此之间没有任何交叉引用所有关系都在第三个表
Employee-Department映射中维护
基于企业对企业的关系可以是
一对多
多对多
,在本例中是
一对多
(有员工的部门)

要求

我想从部门的角度得到工资总额。与下面的查询类似,我在这里对3个表进行简单连接。这只有在所有数据都在同一个数据库和单个微服务中时才可能实现

选择d.部门名称、金额(如工资)
来自员工e、部门d、员工部门映射c
其中d.DepartmentName==c.DepartmentName
e.雇员==c.雇员
按c.DepatmentId分组
约束

  • employee表包含薪资信息
  • 员工-部门关系由第三个表维护
我不是在寻找确切的答案,而是在寻找解决这些问题的方法。
想知道如果你需要聚合输出,你会如何设计你的微服务,你会把所有这些表放在一个微服务中吗?我不想从everymicroservice中提取数百万条记录,并在内存中进行聚合

微服务边界-如果您没有任何其他可伸缩性原因-应由业务部门定义。在这种特殊情况下,在不知道任何其他要求的情况下,我想说您应该选择一种管理这两个实体的微服务。话虽如此,我有足够的经验知道,在现实世界中,这种解决方案并不总是可行和可能的。幸运的是,您可以遵循一些模式来修复所描述的情况。例如,CQRS可以是一种解决方案

您必须在这里将您的想法转变为微服务。我可以在这里提出的建议是

  • 您必须对不同的微服务执行多个调用,并返回一个可以使用该模式的结果。您必须编写一个聚合器服务,通过两个API服务聚合两个表的输出

  • 如果您不喜欢上述选项,则必须对数据库进行非规范化,并在Employees表中显示dept name。这就是为什么我们在微服务中使用NoSQL


我认为聚合是一个比非规范化更好的选择,因为这只是一个foo-bar示例,而在实际情况下可能很难管理。没有sql比sql db稍微好一点。