队列和微服务的异步通信

什么是同步通信?

考虑以下微服务架构示例:

微服务架构

您让 Microservice1 调用 Microservice2,而 Microservice2 又调用 Microservice3。假设 Microservice3 提供简单的 Web 服务功能。因此,Microservice1 可以通过 HTTP 向其发送数据请求,并返回包含所请求数据的响应。

这两个微服务之间存在的通信称为同步通信。Microservice1发送请求,等待数据返回,然后继续。

同步通信的缺点

当响应几乎立即到达时,这种通信模式效果很好。但是,它对所涉及的微服务施加了限制。为了使 Microservice1 可用,Microservice2 也需要可用。

在某些情况下,同步通信甚至可能对用户不友好。

假设 Microservice2 宕机了。在这种情况下,需要告知提交请求的用户。你并不总是想这样做。在这种情况下,异步通信提供了更好的选择。

异步通信

看一下以下应用程序架构:

微服务应用架构

在上图中,我们使用了 ZipkinDistributedTracingServer。不同的微服务发送日志,最终在 Zipkin 跟踪服务中进行整合。每个微服务将其跟踪信息放入 RabbitMQ 消息队列中。服务器在消息进入队列时对其进行处理。

在此架构中,应用程序通过 RabbitMQ 进行通信。CurrencyCalculationService 将其自己的跟踪信息放入 RabbitMQ,然后忘记它。它不担心返回给它的响应。

现在,如果 ZipkinDistributedTracingServer 宕机会发生什么?

与之通信的服务一点也不担心。他们将继续向队列发送消息。当服务器恢复时,它会继续处理队列中存在的消息,并将它们保存到数据库中。

异步通信的优点

让我们看看异步通信的一些优点:

在涉及异步消息传递的系统中,服务器不需要始终启动并运行。放入消息队列的消息可以稍后批量处理。

您可以生成多个实例来减轻负载,而不是使用跟踪服务器的单个实例来处理消息队列。

如果您使用现代版本的消息队列,那么您很有可能使用重播功能。这有助于重新处理最初引发错误的消息。

异步通信对于需要最终一致性的系统来说非常有用。

最棒的是,只要我们修复错误并重新处理消息,发起错误请求的服务的用户甚至不需要知道它们。

异步通信的局限性

如果处理需要实时,即如果对某个请求的响应时间存在严格限制,则不能使用异步通信。

概括

相关推荐
HavenlonLabs31 分钟前
硬件 + SaaS 产品的工程化路径:从系统架构、PCB 设计到工程样机
网络·安全·架构·系统架构·安全架构
SamDeepThinking2 小时前
我们当年是如何真实落地BFF的?
java·后端·架构
宜昌未来智慧谷3 小时前
WWDC 2026开发者视角解读:Siri独立App的技术架构与第三方AI模型接入机制
人工智能·架构·apple·wwdc·gemini
协享科技3 小时前
Spring Boot 与 Go 双服务架构实践:从单体拆分到通信设计
java·人工智能·spring boot·后端·架构·golang·ai编程
这个DBA有点耶3 小时前
索引优化深潜(下):索引合并、ICP 与索引设计的实战法则
数据库·mysql·架构
行者-全栈开发3 小时前
深度解析 WWDC 2026:苹果 AI 全栈技术架构与落地实现路径
人工智能·架构·wwdc
我是一颗柠檬4 小时前
【Java项目技术亮点】分库分表+数据路由策略:单表5000万后的架构升级方案
java·开发语言·分布式·架构
小短腿的代码世界5 小时前
QtitanRibbon 深度解析:工业级Ribbon界面框架的架构设计与自定义扩展
qt·3d·架构
老码观察5 小时前
事件驱动架构从概念到落地——让系统像神经反射一样响应变化
架构
隔窗听雨眠6 小时前
原生一体化多模态大模型技术研究:从拼接到统一的架构革命
人工智能·架构