【问题标题】:Zone of responsibility of microservices? [closed]微服务的责任范围? [关闭]
【发布时间】:2021-12-24 06:27:37
【问题描述】:

受微服务的启发,我尝试设计一个小型服务器应用程序来学习如何构建它们以及如何将它们相互连接。

我确定我至少需要两个服务:OrderService 在用户订单中执行业务逻辑,NotificationService 通过某些渠道向用户发送消息。

假设用户订单来到OrderServiceOrderService 处理此查询并提供在将其委托给NotificationService 后应收到通知消息的用户列表。

我想知道,NotificationService 应该了解用户吗?我应该向NotificationService 发送什么样的数据:用户实体、用户 ID 或消息类型?

NotificationService应该向数据库请求接收数据吗?

我猜,没有。 NotificationService 应该只知道准备好的正文消息和必须发送消息的通道类型。

您能否分享一下您对如何找到每个服务的边界并通过责任限制它们的想法?

【问题讨论】:

    标签: design-patterns architecture microservices software-design


    【解决方案1】:

    我对此的看法是,通常我们倾向于过多地关注microservices 词中的micro。这并不意味着您应该始终拥有如此专注的服务,只做一件非常微小的事情。为什么?因为这会导致你现在面临的问题。微服务不能共享数据库,因此数据应该从一个数据库流向另一个数据库,但问题是,哪些数据?

    我的第一个建议是让您真正考虑两个单独的服务是否是您真正需要的,或者您是否过度设计了它。由于多种原因,运行多个微服务是一项复杂的任务。所以我们真的需要考虑一下我们是否真的需要这个额外的负担。

    假设您最终决定确实需要这两个独立的微服务,那么我会说以下内容:

    我想知道,NotificationService 应该知道用户吗?

    不,否则您将进一步耦合您的服务。

    我应该向 NotificationService 发送什么样的数据:用户实体、用户 ID 或消息类型?

    只有真正发送通知所必需的:通知的收件人(例如它的电子邮件)、通知的内容以及可能有助于您在 NotificationService 方面的逻辑的通知类型。

    NotificationService 是否应该向数据库发出请求以接收数据?

    不,永远不要,否则你违反了微服务的“规则”(数据库不得共享,每个微服务都应该有自己的数据库)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-25
      • 2020-12-30
      • 2020-03-23
      • 2019-11-15
      • 1970-01-01
      • 2012-05-28
      • 1970-01-01
      • 2017-05-30
      相关资源
      最近更新 更多