微服务的职责范围?

Zone of responsibility of microservices?

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

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

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

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

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

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

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

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

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

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

I wonder, should NotificationService know about users?

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

Whats kind of data I should send to the NotificationService: users entities, users id, or message type?

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

Should NotificationService make requests to the database for receiving data?

不,绝不,否则你就是在破坏微服务的“规则”(数据库不能共享,每个微服务应该有自己的数据库)。