DDoS(Distributed Denial of Service,分布式拒绝服务)指的是攻击者控制大量分散在网络各处的机器,在同一时间向目标发送超出其处理能力的请求,让对方服务变慢或彻底不可用。
打个比方,你的服务是一间小餐馆。正常情况下一天来一百桌客人,后厨和桌椅刚好够用。攻击者不砸门、不锁门,只是雇了两千个人轮流进来占座、点一杯白水坐满一天。门口排起长队,真正的客人进不来——这就是“拒绝服务”。而“分布式”的意思是,这些人是从全城各个方向、坐着不同的车来的,你没法靠“记下这个人的脸不让进”解决问题。
传统叙事到这里就结束了。但对做 AI 应用的人来说,更要命的是后半段:你的成本结构本身就是攻击面。
它怎么“拿你的计费模型打你”
云上的资源大多按量计费:请求数、出站流量、GPU 推理时长、AI 词典:向量数据库">向量数据库读写、第三方 API 调用次数。自动扩容(auto scaling)则是为了应对正常高峰设计的——流量涨了,机器自动加上去。
这两件事叠加,等于给攻击者递了两把刀:
1. 刷量即刷钱。每一个被伪造的请求,都可能触发一次真实的模型推理、一次真实的 API 计费、一次真实的存储读取。攻击者花很小的代价,让你的账单连翻数倍。安全圈管这叫 Denial of Wallet(钱包拒绝服务)——服务没挂,但账付不起了。
2. 扩容反过来成了放大器。攻击流量涌入,监控看到 QPS 飙升,弹性伸缩自动拉起二十台机器。攻击停了,机器空转几小时才缩容回去。攻击者用一波短促的脉冲式流量,就能换你一段持续的空转成本。更糟的情况是触发云厂商的账户额度上限,正常业务跟着一起被限流。
所以对按量付费的架构,"能不能扛住流量"和"会不会被刷破产"是两个完全不同的问题。前者是可用性问题,后者是财务问题。
和几个相邻概念的区别
| 概念 | 核心特征 | 主要伤害 |
|---|---|---|
| DDoS | 分布式来源的海量流量/连接耗尽 | 可用性 + 成本 |
| CC 攻击(Challenge Collapsar) | DDoS 的一种,专打应用层接口,请求看着“合法” | 打穿业务逻辑,最易推高推理成本 |
| 正常流量洪峰 | 来源真实、有商业价值、可预测 | 短期压力,通常带来收入 |
| 爬虫(crawler) | 通常低速、持续,目的往往是数据 | 数据资产与长期成本 |
关键差别在于意图和形态:洪峰是“生意好”,爬虫是“被偷看”,DDoS 则是“有人花钱让你烧钱”。CC 攻击尤其难防,因为它的请求在协议层面完全合规,只是被高频重复——对一个接收自由文本、再交给大模型处理的接口来说,这几乎是量身定制的账单炸弹。
对从业者的实际意义
工程上要做的不是单纯的“加固带宽”,而是把成本和行为绑定起来:
- 给每一条花钱的路径设限额:按用户、IP、API Key、会话分别设置速率限制(rate limiting)和日/月配额,让单个来源无法无限放大支出。
- 给自动扩容装刹车:设置扩容上限、冷却窗口和预算告警,别让伸缩策略成为攻击者的杠杆。
- 把便宜的门放在前面:缓存、静态化、鉴权、人机校验都放在调用模型之前,让无效请求在花钱之前就被拦下。
- 异常识别看行为不看流量:同一路径重复率极高、请求体模板化、会话生命周期异常短,都是比“流量大”更可靠的信号。
- 缓存和降级预案先写好:真被打的时候,能不能切到小模型、返回兜底答案、暂时关闭非核心功能。
对普通职场人,一句话版本是:当你的系统按用量付费,任何“别人能用你的接口”的地方,都是一个别人可以替你花钱的地方。 防护的重点从“别让门被撞坏”,变成了“别让门被当成提款机”。
具体产品和计费细则各家差异很大,实际配置以官方页面为准。
