如何定义报告微服务的边界?
How to define boundaries of a reporting microservice?
假设我有一个 Order Service
提供了一个 API 用于创建、更新和取消订单。必要时,用户必须能够生成包含订单详细信息的 PDF。
我不是特别喜欢 Order Service
包含执行此 PDF 生成所需的逻辑(和所有依赖项),因为如果我需要在系统的更多部分实现 PDF 生成,我会在每个微服务上加载大量依赖项,此外微服务似乎承担了比它应有的更多责任。
但另一方面,如果我创建一个 Reporting Service
来生成这些 PDF,我会考虑到技术问题,而且,每个服务都必须发送数据、模板和设置Reporting Service
并通过网络接收生成的 PDF 文件,这可能是一个瓶颈。
考虑到 Chris Richardson 在《微服务模式》一书中所说的内容:
microservices should be organized around business concerns rather than
technical concerns
如何在不违反限界上下文和保持关注点分离的情况下进行设计?
PDF 渲染与任何其他视图层问题没有什么不同。将其封装为与您用于将订单呈现到网页的类型相同的 granularity/separation。
由于您可能不会在订单服务中处理 HTML/JS 订单呈现,因此您可能也不想在那里处理订单呈现。将您的 PDF 呈现保存在知道如何呈现它们的专用服务中,并将所需的数据传递给它。尽管订单服务可能不会调用此服务,但它可能会调用订单服务。
最好在库中编写生成 PDF 的逻辑,并在需要的微服务中使用该库。
为 PDF 生成开发单独的微服务不是一个好的选择,因为 PDF 生成依赖于 (1.) 来自另一个微服务的数据和 (2.) 将数据转换为 PDF 的模板。所以,会有很多数据流。
假设我有一个 Order Service
提供了一个 API 用于创建、更新和取消订单。必要时,用户必须能够生成包含订单详细信息的 PDF。
我不是特别喜欢 Order Service
包含执行此 PDF 生成所需的逻辑(和所有依赖项),因为如果我需要在系统的更多部分实现 PDF 生成,我会在每个微服务上加载大量依赖项,此外微服务似乎承担了比它应有的更多责任。
但另一方面,如果我创建一个 Reporting Service
来生成这些 PDF,我会考虑到技术问题,而且,每个服务都必须发送数据、模板和设置Reporting Service
并通过网络接收生成的 PDF 文件,这可能是一个瓶颈。
考虑到 Chris Richardson 在《微服务模式》一书中所说的内容:
microservices should be organized around business concerns rather than technical concerns
如何在不违反限界上下文和保持关注点分离的情况下进行设计?
PDF 渲染与任何其他视图层问题没有什么不同。将其封装为与您用于将订单呈现到网页的类型相同的 granularity/separation。
由于您可能不会在订单服务中处理 HTML/JS 订单呈现,因此您可能也不想在那里处理订单呈现。将您的 PDF 呈现保存在知道如何呈现它们的专用服务中,并将所需的数据传递给它。尽管订单服务可能不会调用此服务,但它可能会调用订单服务。
最好在库中编写生成 PDF 的逻辑,并在需要的微服务中使用该库。
为 PDF 生成开发单独的微服务不是一个好的选择,因为 PDF 生成依赖于 (1.) 来自另一个微服务的数据和 (2.) 将数据转换为 PDF 的模板。所以,会有很多数据流。