后端、接口与数据 · 进阶

负载:限流与自我保护

一句话: 健康的系统会及早而明确地拒绝,而不是在它扛不住的负载下慢慢垮掉。

限流

按调用方、按路由、按资源。返回合适的状态码,以及一个告知何时重试的响应头。没有写进文档的限制,会制造出莫名其妙就坏掉的集成。

把「防滥用」和「容量管理」分开。前者是硬性的,后者是有弹性的。

保护核心

队列设最大长度、及早卸载负载,以及资源隔离,好让一条慢路由不会把所有连接耗光。如果一条繁重的报表路由能把登录路由憋死,那你有的是架构问题,不是容量问题。

事前测,别事后测

在一个接近生产的环境上做压力测试,找到响应时间开始爆炸的那个点。那个点就是你的容量,值得在一场营销活动替你发现它之前就先知道。

深入一层

定义分级行为:先关掉次要功能,然后只从缓存提供,最后才拒绝。一个懂得收缩的系统,能挺过一个会压垮「只会工作或者崩溃」的系统的负载。