通过引入共享微服务确保状态一致性?

Ensure state consistency by introducing a shared microservice?

假设我在不同的微服务中有 2 个实体(聚合根)。

我需要添加在这些实体的生命周期内填写自定义(动态)表单的可能性。

表格由用户创建,不能填写检查中的报告特定表格,反之亦然。 这些实体中的表单结构(字段类型)和表单提交(答案)模型是相同的。

我的问题是在给定以下域约束的情况下如何以微服务方式设计它:

方法 #1

在每个服务中引入一个表单实体并将答案分别存储在report/inspection中。

优点:

缺点:

方法 #2

引入新的表单服务来存储用户定义的表单和表单答案。实体应仅通过 id 引用答案。

优点:

缺点:

我会给出一些通用的答案:

一个好的微服务基础设施更多的是关于解决特定业务问题的服务,而不是作为数据库的接口——这是一个常见的错误——服务从字面上看就像是数据库查询的代理。

让我从您的描述中提取服务理念:

  • “表单由用户创建”:FormCreationService?
  • FormFillInService
  • ReportsService - 它将有一个状态机来确保只允许正确的转换(例如,完成后不进行编辑)
  • InspectionService - 也有状态机

下一步是为每项服务描述 API(请在 google 找到关于“设计 api 的非常古老的话题”的 YouTube 视频)。

然后您通过序列图验证 api - 因此您可以合并服务 - 以防它们太小;或拆分更大的块。

归根结底 - 您想将 Unix 哲学应用于您的服务:“做好一件事”。