扩容决策的成败,不在流量冲进来的那一刻,而在你提前定好的阈值和触发规则。当攻击规模超出预期时,最有效的扩容决策不是临时加机器,而是按“带宽连接数业务优先级”三层顺序,先保核心链路,再谈吞下全部流量。
攻击规模超出预期时,先判断是真扩容还是该引流
很多团队一看到流量翻倍就急着买资源,结果钱花了,业务还是没撑住,行业共识认为,攻击流量超出预期时,第一步不是扩容,而是判断当前瓶颈是带宽耗尽、连接数打满,还是应用层被压垮,三种情况对应三种完全不同的扩容路径。
带宽型扩容:直接拉高防御上限
机房带宽跑满后,所有请求都会卡在入口,此时需要联系IDC或云厂商临时加带宽,或者将流量切到高防IP,这里有个关键操作:提前跟服务商确认备用带宽是否存在,以及加带宽的生效时间,很多服务商承诺“分钟级生效”,但实际需要人工审批,往往要10到30分钟,如果攻击还在持续,这半小时就是生死线。
连接数型扩容:调整内核参数比加机器更快
如果带宽没满但连接数报警,通常是Nginx或负载均衡的worker_connections不够了,此时最快速的应急手段是修改内核参数net.ipv4.tcp_max_syn_backlog和net.core.somaxconn,同时调大net.nf_conntrack_max,对于常规攻击,这些调优能扛下相当一部分压力,如果调完仍打满,再考虑横向扩容节点。
应用层扩容:先限流再扩容
当CPU和内存飙升,但带宽和连接数都正常,说明攻击打到了业务接口,直接加服务器没用,因为攻击请求会均匀分配到新机器上,正确顺序是:先开启WAF的CC防护规则,或对非核心接口做限流,再把核心服务拆到独立集群,扩容在这里是最后一步,而不是第一步。
扩容决策的量化阈值:设置三条警戒线

没有标准就谈不上决策,攻击规模超出预期意味着你的预估模型失效了,此刻要快速建立新的基准线。
警戒线一:带宽利用率超过70%持续3分钟
这不是让你去等3分钟,而是在攻击刚涌进来时,就要观察带宽曲线的斜率,如果斜率陡增,直接跳过观察期,按“超出当前上限的两倍”来准备资源。
警戒线二:SYN半连接数达到后端最大会话数的60%
该数值可以在Nginx的ngx_http_stub_status_module或ss -s输出里看到,达到这条线,意味着即使带宽够,后续正常用户也会因连接表耗尽被拒,此时扩容的方向不是加机器,而是先在入口层丢掉攻击包。
警戒线三:核心API响应时间从P99的200毫秒恶化到2秒
响应时间恶化说明攻击已经开始消耗CPU或数据库连接池,这时候扩容的优先级要让位于“降级”把非核心功能临时关闭,比如搜索、推荐、日志上报,保住下单和登录,比保证页面完整更重要。
服务器扩容方案怎么选?本地、云资源还是混合切流
这是实际运维里最难的一步,攻击规模超出预期时,往往你原来的架构根本不支持快速扩展,你需要评估三个硬条件,再决定用什么方案。
有没有预付费的云资源池
如果你用的是按量付费云主机,扩容很快,但成本会失控,据统计,一次大流量攻击持续4小时,按量付费的带宽费用可能是包月费用的5倍以上,如果你预算有限,且攻击频率不高,更适合直接启用DNS切到高防IP,而不是自己加带宽。
是否具备多地域IP池
攻击往往集中打一个IP,如果你能用智能DNS将流量分散到华东、华北、华南三个入口,每个入口只承载正常用户的流量,同时把攻击流量隔离到高防清洗节点,效果远比单点扩容好,这里要特别注意:切换DNS的TTL要提前改成60秒,否则用户端缓存会拖慢调度。

高防IP和CDN有什么区别,应对大流量时该用哪个
这是很多新手最容易混的地方。 CDN的作用是缓存静态资源并加速分发,它不抗超大流量攻击,因为源站一旦被打爆,CDN缓存也回源不了,高防IP则是把攻击流量引流到清洗机房,先过滤再回源,当你面临攻击规模超出预期的情况,优先选高防IP,而不是CDN,如果业务全是静态页面且不依赖源站,用CDN也能扛一部分;反之,必须上高防。
执行扩容时,按这个顺序操作不会乱
实际动手时,不要东一榔头西一棒子,记住这个次序,能少走弯路。
- 第一步:登录云控制台,开启“弹性公网IP”的“DDoS原生防护”,设置封禁IP和限速阈值,这里不用关业务,只需把异常流量拦截在边界。
- 第二步:修改服务商的安全组或防火墙,只放行必要的端口,比如80/443,同时把SSH端口改成非标准,避免运维通道被堵。
- 第三步:启动备用节点,如果用的是云厂商的弹性伸缩组,直接调整期望实例数;如果是物理机,打电话给机房,让他们把预先做好的镜像拉起来。
- 第四步:Nginx层临时开启
limit_req,针对每个IP设置每秒请求数上限,此时不要纠结误伤,先保整体。 - 第五步:观察后端监控面板,确认错误率低于5%,再逐步放开访问限制。
这五步的关键在于“先拦截,再扩容”,很多人反过来,先扩容再防护,结果新机器刚上线就直接被打瘫,白白浪费资源。
扩容后的验证与回滚动作
攻击不会一直持续,但扩容不能一直保留,当攻击流量回落后,你需要验证两个点,再决定是否缩容。
验证点一:流量是否真的被打走
看防火墙拦截日志和DDoS报表,确认攻击源IP不再产生新会话,有些攻击是脉冲式的,每隔几分钟打一轮,至少观察一个完整周期(通常是10到15分钟)才能确认结束。

验证点二:业务侧有没有隐性损伤
扩容期间你可能开启了限流、丢弃了非核心请求,这些操作可能误杀了正常用户,攻击结束后,检查订单转化率和接口错误日志,把被限流的IP段放回白名单,如果发现数据库连接池被占满,重启应用服务,而不是继续加大内存。
确认无误后,执行缩容,缩容要“慢慢来”,每次减少20%的节点,观察5分钟,直到回到日常水位,切忌一下全部释放,否则残余攻击会造成二次击穿。
攻击规模超出预期时的扩容决策常见问题
扩容预算不够怎么办?
如果预算有限,优先保核心业务入口,把静态资源全量切到CDN,动态接口只保留一个最小化集群,同时关闭所有非必要功能,这样做虽然体验会差一些,但至少能维持交易链路,比直接买高价高防包更实际。
攻击流量来自多个省份,地域上怎么处理
如果攻击源分散在不同地域,单点高防清洗能力会受限,此时可以购买多个地域的高防IP,再用DNS轮询把正常流量分摊,攻击流量则会被每个地域的清洗节点分别扛下,这一方案的缺点是成本会翻倍,适合大客户或金融电商场景。
有没有不用花钱的临时扩容办法
严格来说没有完全免费的办法,但可以缓解,比如把Nginx的proxy_cache打开,让静态资源在边缘缓存命中,减少回源压力,同时用iptables直接DROP掉高频IP段,能腾出不少连接资源,这些操作不产生费用,但只能扛小规模攻击,一旦带宽被打满,还是得寻求云厂商的防护能力。
扩容决策的本质,是在资源、成本和业务存活之间找平衡点,攻击规模超出预期时,遵循“先拦截、再扩容、按阈值行动、预留验证周期”这套逻辑,就能把损失控制在可接受范围内,下一次攻击来临前,提前把阈值和操作手册写清楚,比任何时候的临场判断都更可靠。