专业书籍精读 · SRE · 第 21 章

处理过载:与其硬撑到全盘崩掉,不如体面地拒绝一部分

Site Reliability Engineering · Ch 21 · Alejandro Forero Cuervo · Google · 2016

EN →

这一章讲什么?

你抢过演唱会门票、挂过专家号、双十一零点下过单——那一瞬间服务器上发生的事,就是这一章的主题:来的人比能招待的多。Google 的 SRE 书第 21 章不讲怎么把系统做得更快,它问一个更现实的问题:当它已经忙不过来了,该怎么办?

先打个比方

把服务想成一家只有 20 张桌子的餐厅,今天门口来了 200 人。最糟的做法是全放进来:所有人挤在店里,服务员疲于奔命,点单乱成一团,两小时后一桌菜都没上齐——200 个人全都没吃上饭。餐厅并没有"接待了 200 人",它只是把原本能好好服务的那 20 桌也搞砸了

旧世界为什么难

系统的本能就是来者不拒。请求进来先排队,队越排越长,每个人等得越久;等久了,客户端以为失败了,又按了一次刷新——同一批人于是变成两批、三批的请求砸回来。压力开始自己喂自己,几十秒内就能从"有点慢"滑到"完全没响应"。

真正可怕的不是慢,是有效产出掉到零:机器满负荷转着,算力全花在那些早就没人等的结果上,没有一个用户拿到东西。

那该怎么办

四招,本质上都是体面地少干点活

带来了什么

这套东西把"拒绝"变成了一种正经能力,而不是失败的标志。承认容量有限、主动少接一点,系统反而能在流量暴涨时把产出稳稳停在自己的上限上,而不是在某个点整体塌下去。代价也很诚实:拒绝本身也要花人手(门口挂牌那个人也得站着),而"简餐菜单"平时几乎不用,真到那天很可能已经端不出来了。

一句话记住

过载时最贵的错误,是什么都想接下来。与其硬撑到全盘崩掉、谁都没拿到结果,不如早一点、有选择地对一部分人说不——好保住剩下那部分人是真的拿到了东西。

想进到具体机制、公式和示意图? → 切到精读版