【问题标题】:Is synchronous communication between services anti-pattern in microservices?微服务中服务之间的同步通信是反模式吗?
【发布时间】:2021-01-17 20:29:18
【问题描述】:

我对微服务有些陌生。我目前正在使用微服务开发应用程序,并且我同时使用同步和异步通信方法。最近看到几篇文章说不应该使用同步(http)通信,而应该只使用异步(消息代理)。

所以我的第一个问题是标题“微服务中服务之间的同步通信是反模式吗?”

如果是,那么我该如何克服这种情况: 假设我有两个服务,分别称为“用户”和“消息”,用户 A 想要向用户 B 发送消息。所以当用户 A 发送消息时,我想检查用户 A 是否有权向用户 B 发送消息,这些权限包含在用户服务中。因此,为了获取这些信息,我必须从消息服务向用户服务提出请求。如何在不使用对用户服务的同步请求的情况下克服这个问题?

【问题讨论】:

  • 我不会调用同步通信反模式。它只是有一些严重的限制。随着服务数量的增加和它们之间的交互,它只会让你很快达到极限。以同步的方式开始使用微服务没有任何问题。

标签: asynchronous microservices synchronous messagebroker anti-patterns


【解决方案1】:

你说得对,微服务架构中的同步交互通常被称为反模式,但我不会这么说,因为我们仍然经常使用这种模式。

另外,使用哪种模式很大程度上取决于整个系统的微服务架构。

您可以在确实有必要和合理的情况下使用服务之间的同步通信。 只要不需要来自另一个服务的即时响应,我就会使用异步通信。 理想情况下,您应该尽量减少同步交互,但遗憾的是,您仍然不能没有它们,因为有些情况下客户端需要服务的即时响应。

最流行的同步通信技术有:

  • 休息
  • gRPC

推荐阅读以下link微服务架构中服务间同步交互的模式。

【讨论】: