系统设计-服务器发送请求但宕机了,是否收到响应

问题描述 投票:0回答:1

我的服务有以下基本设计。 enter image description here

流程: 用户向浏览器发送请求。请求通过负载均衡器到达 API 服务。负载均衡器将请求重定向到可用服务器,然后将其发送到外部 API。

场景: 由于我们有水平扩展的服务器,请求到达服务器 1,服务器 1 将其发送到外部 API。在我们收到外部 API 的响应之前,服务器 1 出现故障。 问题:

  • 在这种情况下,响应是否丢失(因为请求来自服务器 1)?
  • 我们如何处理此用例的故障转移场景?
failover system-design
1个回答
0
投票

请求丢失,因为通过 Server1 创建的连接丢失。

这是分布式系统中要处理的典型情况。网络和服务器始终离线,包括一些临时停电。

处理此类情况的典型方法是重试 - 客户端在声明请求无效之前等待一些预定义的时间。然后客户端可以选择重新发送请求。

重试是有风险的。系统可能会暂时变慢,因此重试会使系统更加过载。通常采用另外两种策略:重试有策略(例如,最多重试三次,具有指数退避时间)和限制(系统可能明确丢弃请求,客户端应该尊重这一点)。

另一个重要的概念,可以说是最重要的,是幂等性

[来自维基百科的复制]幂等性是数学和计算机科学中某些操作的属性,因此它们可以多次应用,而不会改变初始应用之外的结果。

幂等 API 的要点在于它们可以安全地重试。如果客户端认为操作失败,则客户端不知道请求在到达执行器之前还是在请求完成之后是否失败(如您的示例中所示)。幂等 api 在任何情况下都可以安全地重试。

© www.soinside.com 2019 - 2024. All rights reserved.