微服务之间的异步通信

问题描述

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

问题:

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

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

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

感谢每一个回答

解决方法

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

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