过载与服务器雪崩
过载: 系统负载超过系统最大的处理能力。
服务器雪崩: 服务器的处理能力陡降,低于系统原本能达到的最大处理能力。
系统过载处理不当会造成服务器雪崩: 系统过载时,CPU、内存等资源达到瓶颈,系统响应会变慢。这时可能会发生大量的请求重试或系统内部重试,进一步加剧系统负载,产生恶性循环,导致系\
统处理能力急剧下降(服务器雪崩)。
服务器雪崩
如图所示,假设系统的负载为600请求/秒,当请求数超过600时,由于发生了大量的内部重试和资源竞争,能够有效返回的请求数会发生陡降,最后远低于600.这就是我们所的服务器雪崩。
理论上,系统的负载为600请求每秒的话,即使每秒访问量大于负载,也应该至少能有效返回接近600的请求。过载保护就是为了能够保证这一点。
过载保护
系统过载的原因
- 访问量过大,(某个时间内访问量过大,或突增)
- 系统内部瓶颈、故障。(系统内部故障会导致系统的处理能力下降,从而容易引发过载。)
- 后端故障、延迟。(后端处理能力的下降会影响到本系统的响应能力)
过载预防与过载保护
系统过载可能导致服务器雪崩,系统设计时要尽可能预防过载,并且要考虑过载发生时如何尽可能不让系统发生性能雪崩。
过载预防和过载保护的解决方案没有进行严格区分,很多方案同时具有双方面的作用。
设计过载预防、过载保护的方案时,可以从过载的产生原因入手。
过载预防和过载保护的解决方案
轻重分离
轻重分离是指对系统的服务内容进行细分,分离部署系统服务,避免局部的过载扩散到全局。
负载均衡可以避免单机过载过载,保证系统整体处理能力处在较好的状态。
灰度发布
系统过载可能是由于自身故障导致的, 其引发原因可能是系统升级(新版本存在bug),灰度发布可以缩小影响范围。
流量控制
系统可以通过流量控制避免系统过载。
通过限制最大的并发连接数,避免过载。
重试频率控制
系统过载时,由于请求发生延时,前端通常会发起重试,如果重试频率过大,则必然造成服务器雪崩。因此可以通过限制请求的访问频率,避免过载或服务器雪崩。
监控告警
系统监控自身状态,当系统负载达到警戒值时,系统除了自身要采取相应措施外,还应该反馈给后端和客户端。
最大处理时延控制
系统要限制一个请求的最大处理时延,避免因为请求的处理时延过长而导致系统过载。
后端延迟时间控制
后端延迟经常要大于本地延迟时间,因此限制后端延迟时间也是避免系统过载的重要手段。
过载保护的策略
前面介绍了一些过载预防和过载保护的具体方法,就过载保护而言,主要是使用了以下策略:
- 快速返回策略: 利用监控告警的,client获取server状态,如果认定其不可用,则不需要再把请求发给Server。请求快速返回。
- 快速拒绝策略: Server根据自身状态,拒绝掉一些请求。