后端、接口与数据 · 进阶
负载:限流与自我保护
一句话: 健康的系统会及早而明确地拒绝,而不是在它扛不住的负载下慢慢垮掉。
限流
按调用方、按路由、按资源。返回合适的状态码,以及一个告知何时重试的响应头。没有写进文档的限制,会制造出莫名其妙就坏掉的集成。
把「防滥用」和「容量管理」分开。前者是硬性的,后者是有弹性的。
保护核心
队列设最大长度、及早卸载负载,以及资源隔离,好让一条慢路由不会把所有连接耗光。如果一条繁重的报表路由能把登录路由憋死,那你有的是架构问题,不是容量问题。
事前测,别事后测
在一个接近生产的环境上做压力测试,找到响应时间开始爆炸的那个点。那个点就是你的容量,值得在一场营销活动替你发现它之前就先知道。
深入一层
定义分级行为:先关掉次要功能,然后只从缓存提供,最后才拒绝。一个懂得收缩的系统,能挺过一个会压垮「只会工作或者崩溃」的系统的负载。