网络与服务过载预防及限流机制详解
在当今的技术环境中,保障网络和服务的稳定运行至关重要。基础设施服务的过载预防机制常常被忽视,但实际上它们和公共服务一样重要。当关键服务不堪重负时,如果不手动干预其他服务来减轻负载,恢复服务可能会变得困难。下面我们将介绍几种常见的预防机制。
1. 熔断机制(Circuit Breaker)
熔断机制是一种常用的预防机制,它通过在客户端包装 RPC 调用,当达到阈值时自动使尝试失败。在一段时间内,所有调用将直接返回失败,而无需实际尝试。
1.1 AWS 网络过载案例分析
AWS 曾发生过一次故障,一个行为异常的应用程序在客户网络和核心网络之间发送了过多流量,影响了全球的 AWS 客户。该问题主要由两个因素导致:
- 行为异常的应用程序发送了过多请求。
- 客户端在失败时没有进行退避操作。
第二个问题导致了长时间的故障。尽管 AWS 有标准的 RPC 客户端,在请求失败时会进行递增退避,但在这个案例中,客户端库未能按预期工作。这导致端点过载时负载没有自行减少,而是进入了某种无限循环,不断增加受影响系统的负载,使网络交叉连接不堪重负,进而导致监控失效,难以发现问题。最终,AWS 不得不尝试在不影响仍在运行的客户服务的情况下,通过缩减应用程序流量来降低网络负载。
这个案例凸显了在发生故障时防止应用程序重试的重要性。更多相关信息可参考: https://aws.amazon.com/message/12721/