有青岛的同行问我,接口老被人刷崩怎么办?我的答案是:得有限流这层保护,规定每个来源在单位时间内最多能请求多少次,超了就拦下来,别让异常流量拖垮正常服务。信服无限青岛团队做接口时,限流是标配。
先想清楚限谁
限流要落到一个明确的维度:按用户、按 IP、还是按接口。维度选错,要么拦不住坏人,要么误伤自己人。青岛不少团队没想清这一点,一刀切地限,结果正常用户也被拦,投诉不断。
维度要按场景定。青岛做接口的都清楚,防恶意刷取按 IP 或账号限比较合适,保护某个重接口就按接口限。想清楚要防的是什么,维度自然就对了,效果也精准。
限多少合适
阈值定太高起不到保护作用,定太低又影响正常使用。得按真实用量留余量。青岛不少团队拍脑袋定个数,要么形同虚设,要么正常业务也被限,两头不讨好,还得回头调。
阈值最好来自观察。青岛做限流的,会先统计正常流量的峰值,在这之上留出合理余量定阈值。这样既能挡住异常,又不至于误伤,平稳运行后再按实际情况微调,越来越准。
超了怎么办
超限之后怎么回应,也有讲究。直接拒绝并告知、还是先排队慢慢来,看场景。青岛不少接口超限后什么都不说,调用方一头雾水,反复重试,反而让压力更大,雪上加霜。
回应要清楚。信服无限青岛团队做接口时,会明确返回超限的提示和稍后重试的建议,让调用方知道发生了什么。再配合排队或降级策略,系统在压力下也不至于雪崩,稳得住。
接口限流的常见疑问
限流会影响正常用户吗
合理设置阈值通常不影响,关键是按真实用量留出合适余量。
限流和熔断是一回事吗
不是,限流控制请求量,熔断是服务异常时快速失败,两者常配合使用。
加上这层,才扛得住
想清限谁、定准阈值、处理好超限,接口才扛得住异常流量。信服无限团队做接口时,最在意服务稳不稳。把该做的做在前面,后面就少操不少心,这道理放在哪都通用。事情一件件理顺,看着慢,走着走着你就会发现比想象中顺。稳当比求快更划算,步子踏实了,路才走得远。你要在青岛,先统计一下核心接口平时的请求峰值是多少。