【问题标题】:Asynchronous communication between Microservices微服务之间的异步通信
【发布时间】:2021-06-24 15:25:11
【问题描述】:

上周我一直在研究微服务架构模式及其要求和约束。 大多数资源建议使用事件总线/消息代理(异步通信)在微服务之间进行通信,而不是使用 REST API 端点。 同步调用会导致响应时间变长,如果链中某个特定微服务发生故障,可能会导致级联故障。

问题:

假设用户请求网站/移动应用程序上的特定功能或页面,然后需要从多个微服务获取数据并使用它们各自的功能来提供所需的结果。但是为了达到预期的结果(对客户端的响应),所有服务都需要在后端将响应发送回客户端(网站/移动应用程序)之前完成它们的工作。

但是,如果我们使用异步服务请求 - 这意味着调用服务不会等待响应,而是会在不从异步调用服务获取数据的情况下将自己的响应发送回客户端 - 如果异步调用的服务可能不完整,则结果可能不完整被调用的服务没有及时响应(服务不可用或网络问题)。这意味着后端将向客户端发送不完整的响应,这是不可接受的。

我该如何处理这个问题,还是我的概念有误?

感谢每一个回答

【问题讨论】:

    标签: asynchronous microservices communication soa synchronous


    【解决方案1】:

    如果请求获得完整响应是绝对必要的(即请求是同步的),那么这是支持将同步请求和响应拼接在一起的服务的有力论据(并且可能需要在部分成功的情况下处理回滚等等)。

    不过,许多请求并不属于这种模式。例如,响应可以很好地解释为“我们已收到您的请求,将执行操作。您可以使用此请求 ID 跟踪操作的进度”;这种方法非常适合异步消息传递。

    【讨论】:

      最近更新 更多