You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

服务器向External API发请求后宕机:响应是否丢失?如何处理故障转移?

架构场景与故障问题解答

基础架构与流程

我的服务采用如下基础架构设计:
服务架构图

流程:用户向浏览器发送请求,请求通过负载均衡器到达API服务,负载均衡器将请求转发至可用服务器,再由服务器发送至External API。

故障场景

采用水平扩展的服务器集群,请求到达Server 1后,Server 1将其发送至External API,但在收到External API的响应前,Server 1发生宕机。

问题解答

1. 响应是否会丢失?

会丢失。因为External API的响应目标是已宕机的Server 1,Server 1无法接收该响应,也无法将其转发回负载均衡器或用户端。用户最终会因请求超时或未收到响应而感知到请求失败。

2. 故障转移处理方案

  • 请求状态持久化+幂等设计:在负载均衡器或API网关层为每个请求生成唯一ID,将请求的状态(已发送至External API但未收到响应)存储到分布式存储(如Redis、分布式数据库)。当Server 1宕机后,负载均衡器检测到异常,根据持久化的请求信息,将未完成请求路由至其他健康Server。新Server携带原请求ID查询External API的处理结果(若External API支持幂等查询),或重新发起请求(确保请求本身是幂等的,避免重复操作)。
  • 异步请求模式:将同步请求改为异步处理。用户发送请求后,负载均衡器立即返回请求受理凭证,后台通过消息队列(如Kafka、RabbitMQ)分发请求任务。Server 1宕机后,消息队列会将未完成的任务重新分配给其他消费端Server,处理完成后通过Webhook或轮询机制通知用户结果。
  • 统一回调端点配置:若External API支持回调,发起请求时指定负载均衡器或API网关的统一回调地址,而非单个Server的地址。External API完成处理后直接调用该公共端点,负载均衡器再将响应转发给对应用户,避免因单个Server宕机导致响应丢失。
  • 负载均衡器超时重试:配置负载均衡器的健康检查机制,快速识别宕机的Server 1并停止向其转发新请求。同时设置请求超时阈值,当转发给Server 1的请求超过阈值未收到响应时,自动将请求重试转发至其他健康Server(需保证请求幂等)。

内容的提问来源于stack exchange,提问作者Sanketh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 11:17:29