Google SRE Book 第 22 章 - Addressing Cascading Failures

查看原文

本文描述了 Cascading Failures 是什么,为什么产生,产生时有什么现象,以及如何防止它产生。

  • Cascading failure: 一个大系统中的小部分失效,最终导致了系统中其它很多地方级联失效。
  • 过载(overload): 最常见的原因。
  • 资源耗尽:会导致高延迟,错误率升高;而这一系列会导致系统处理能力降低,进而导致资源被耗的更多,直到最后冲垮系统。这些资源可以是 cpu, ram, thread, fd。有的时候很难看出什么资源耗尽,因为资源是在慢慢地全盘耗尽。值得注意的是,资源耗尽会导致健康请求失败,负载均衡也会掺合一脚把服务移除进而导致服务池子扛不住流量。
  • 防止过载:首先心里要有数 - 做压测+线上预留多余的资源;然后第一原则是留着青山在宁愿拒绝服务也要保障服务或者 - 提供 degraded 数据给下游;让服务能发现自己过载了然后拒绝服务;Instrument higher-level 系统然后在系统处理能力变低的时候做 rate limit。此外,retry 要算好间隔,要符合server的retry budget;rpc 要算好 latency,如果超时了就趁早 abort 掉,避免链式搞坏系统。
  • 服务刚起来的时候比较慢(slow startup, cold caching);除了上面的防过载手段,还可以 overprovision 服务,或者慢慢引流量到新起的服务去。
  • Cascading Failures 常见的触发点:server crash,部署的时候,流量自然增长,服务 draining 的时候等等。
  • 应急处置:该重启重启,该起资源起资源,把健康检查先停掉,服务降级,最后的大杀器是砸锅弃帐丢流量。