Spring Cloud Gateway 恶意长连接防护:客户端建立连接不发数据?空闲超时强制断开,释放线程资源!
做过网关开发的同学肯定都遇到过这个问题:恶意用户或者异常客户端建立 TCP 连接后,什么请求都不发送,就静静保持着连接不走。这样会导致什么后果呢? 我之前就遇到过这样一个案例:线上网关突然出现大量连接超时,排查后发现是有人在用脚本模拟"占坑"攻击——同时发起几千个连接,但每个连接都只发送一个请求后就再也不发数据了。这些空闲连接占用着 Netty 的 Worker 线程和内存资源,导致正常请求无法处理。 今天我们就来聊聊 Spring Cloud Gateway 的恶意长连接防护方案,让你的网关不再被"僵尸连接"拖垮。 恶意长连接的危害 1. 线程资源耗尽 Spring Cloud Gateway 基于 Netty 实现,Netty 的工作模型是这样的: Netty 线程模型: Boss 线程(1个) → 接受连接 → 分配给 Worker 线程池 Worker 线程池(N个) → 处理读写事件 → 如果有耗时操作会阻塞线程 问题场景:恶意长连接占用 Worker 线程 - 1000 个空闲连接 - 每个占用一个 Worker 线程 - 正常请求排队等待可用线程 - 响应超时 2. 内....