独立开发应用怎么做压力测试:DDoS、并发、故障恢复和AI编程成本

用AI写代码,应用可以快得离谱。房间能建、用户能进、内容能发、票也能投。

阅读功能说明

收听会朗读正文;速读会按顺序显示短语,速度可调。语言练习可对照已有的不同语言版本。收藏保存在本浏览器中,可从播放器的收藏列表再次打开。

分享这篇文章

分享这篇文章

广告
广告

AI把开发速度拉满以后,最危险的是“我已经做完了”的错觉

用AI写代码,应用可以快得离谱。房间能建、用户能进、内容能发、票也能投。大脑马上宣布:

做完了。

服务器回答:

你刚才只测了一个人。

真正应该测的是:100个人同时操作会怎样?数据库已经写入,但成功响应在网络里丢了怎么办?截止时间和最后一票撞在一起怎么办?支付通知来两次怎么办?故障恢复后所有人一起重连怎么办?

一次小型多人Web应用的代码审查最后扩展成了324个测试项。注意,这不是发现了324个Bug。324项当时全部都还是“未执行”的测试。

1. 不要只盯着DDoS

Cloudflare在所有套餐上都提供自动DDoS检测与缓解,但官方也建议使用限流等应用层防护,因为大型攻击仍可能影响应用。[1]

而独立开发最先撞上的,甚至可能不是攻击,而是正常用户。

如果客户端每3秒轮询一次,简单计算如下:

同时在线设备 每小时状态请求
10 12,000
30 36,000
100 120,000
1,000 1,200,000

这不是实际容量预测。退避、缓存会减少请求;发帖、图片、收件箱、多标签页、定时任务又会增加请求。

截至2026年10月5日,Workers Free标明每天100,000次请求。D1 Free标明每天读取500万行、写入10万行、单数据库500MB、每次Worker调用最多50个查询。[2][3] 单个D1数据库还会逐条处理查询,并发太高时先排队,队列满后可能返回过载错误。[3]

所以真正可怕的未必是“100万攻击者”。

100个正常用户同时玩得很开心,也可能就是压力测试。

2. 为什么会有324项

范围最后覆盖16类:入口与滥用、容量、并发与恢复、定时任务、房间与权限、图片、文字输入、投票、截止时间、结果开放、公开房、长连接、设备与重连、外部服务、支付、发布与监控。

不需要同时做完。先抓可能造成数据损坏、越权、流程卡死、额度耗尽和错误扣款的项目。

3. 上线前优先打的23个点

  1. 明明会拒绝的请求,是否仍然进入昂贵的数据库处理。
  2. 自己的用量统计是否真的覆盖所有高成本路径。
  3. 限流是否能跨重启、跨执行位置保持。
  4. “没有变化”的轮询是否仍然大量读取数据库。
  5. 一个席位是否可以无限创建长连接。
  6. HTTP和长连接是否执行同样的次数限制。
  7. 运营停止后,已连接客户端是否也会停止。
  8. 定时任务延迟时,截止后的操作是否会被误收。
  9. 某些写入失败后,房间状态是否仍然向前推进。
  10. 修复任务重复执行时,统计是否会被加两次。
  11. 游戏真正创建前,是否可能只消耗了“开始次数”。
  12. 写入成功但响应丢失后重试,是否会产生两条回答。
  13. 全角半角、空格等差异是否能绕过昵称唯一性。
  14. 最后一个空位是否可能被两个人同时抢到。
  15. 定时任务是否会积压到永远追不上。
  16. 是否监控整个数据库和索引,而不只是图片容量。
  17. 丢失设备后,别人是否可能接管身份。
  18. 图片格式、像素、元数据、位置信息是否安全处理。
  19. 历史记录越多,页面读取成本是否线性爆炸。
  20. 故障恢复后的同时重连是否造成第二次故障。
  21. 支付是否测试了重复、延迟、失败、取消和恢复。
  22. 是否把本地测试通过误认为生产环境通过。
  23. 数据库宕机时,监控是否也一起失明。

4. Bug最喜欢“组合拳”

高价值场景可以这样设计:

100人同时投票 → 20人刷新 → 10人掉线 → 一部分写入成功但成功响应丢失 → 用户重试。

然后看票数是否重复、过期投票是否混入、界面是否回退到旧状态、同一操作是否执行两次。

OWASP也把并发会话、异常输入、错误处理分别列为测试主题。[4]

5. “写入成功”和“用户收到成功”是两件事

服务器写入成功,网络响应却丢了。用户只看到失败,于是再点一次。

如果没有操作ID或其他去重机制,就可能多一条回答、多一个房间、多一票、多一次通知,甚至多扣一次钱。

重试必须被设计,而不是靠运气。

6. 压力测试要分阶段

在自己控制的环境中从10 → 30 → 100逐步增加。

同样是100人,也要换形状:

  • 全挤在一个房间;
  • 分散到很多房间;
  • 同时加入;
  • 同时投最后一票;
  • 故障后一起重连;
  • 与定时任务叠加;
  • 中途模拟存储失败。

不要对无权测试的第三方系统或真实生产环境随意发大量流量。开始前先定预算和停止条件。

7. “没挂”不等于通过

性能目标可以先设为:普通请求95%在1秒内、99%在3秒内,意外5xx低于0.1%。

但以下项目应当是0容忍:

  • 泄露别人的数据;
  • 越权操作;
  • 重复计分;
  • 已保存数据丢失;
  • 重复扣款。

8. 测试设计9分,执行证据0分,完全可能

324项和23个优先风险做得很好,说明测试设计已经相当成熟。

但没跑之前,证据仍是0。

这不是坏消息。项目已经从“不知道测什么”走到了“知道应该从哪里把它弄坏”。

9. 然后先爆掉的可能是AI周额度

如果一天里让AI不停读大仓库、实现、修改、复查,再循环,先到极限的可能不是服务器,而是AI订阅额度。

截至2026年10月5日,Claude Max 20x网页订阅为每月200美元。“20x”指相对Pro的每个会话容量。会话限制每5小时重置,但Max还有所有模型共用的每周上限。[5]

所以20x不等于无限。

实际消耗与模型、上下文和任务有关,最可靠的是直接看Settings > Usage。

10. “Fable贵”看数字也很合理

Max里Fable 5和5.1属于标准可用模型,但Fable最多可使用每周额度的50%,而且Anthropic明确说明它会比其他Claude模型更快消耗额度。[6]

按用量计费时:

模型 每100万输入Token 每100万输出Token
Sonnet 5.5 $2 $10
Opus 5.5 $4 $20
Fable 5.1 $10 $50

Fable 5.1的输入和输出单价都是Opus 5.5的2.5倍。Fable 5.1通过更便宜的缓存读取降低了相对Fable 5的成本,但绝对价格依然高。[6][7][8]

API价格不能直接换算成Max周额度,不过方向很清楚:重模型长时间运行不会因为“订阅了”就变成免费。

11. 不要每颗螺丝都叫吊车

Sonnet 5.5:日常修复、已知Bug、重复编辑、范围清楚的实现。

Opus 5.5:原因不明的问题、大改架构、跨文件审查、上线前关键判断。

Fable 5.1:只有在最难任务上,能力增益值得更高成本和额度消耗时再用。

这不是模型排名,而是每个任务的成本控制。

12. AI不是消灭瓶颈,而是移动瓶颈

以前:想法 → 开发几周 → 测试。

现在:想法 → 快速实现 → 测试、运维、服务器额度、AI额度一起扑上来。

所以“我一天做完了一个App”可以换成更准确的一句:

“我一天就做到了可以认真把它弄坏的阶段。”

这才是上线准备真正开始的地方。

资料

参考资料(8条)

  1. Cloudflare DDoS Protection developers.cloudflare.com
  2. Cloudflare Workers Limits / Pricing: / https://developers.cloudflare.com/workers/platform/pricing/ developers.cloudflare.com
  3. Cloudflare D1 Limits / Pricing: / https://developers.cloudflare.com/d1/platform/pricing/ developers.cloudflare.com
  4. OWASP WSTG wstg.owasp.org
  5. Anthropic Max plan support.claude.com
  6. Anthropic Fable models support.claude.com
  7. Claude Opus 5.5 anthropic.com
  8. Claude Sonnet 5.5 anthropic.com

分享这篇文章

广告

再来一篇?有没有好玩的?

读完顺便看看:几篇相近的,还有几篇完全不同但很有意思的。

  1. 为什么看到RPG排行榜第一名仍会“嗯……”从BG3与《Clair Obscur: Expedition 33》看“高评价”和“适合自己”的区别
  2. 明明只是在休息,却觉得“好浪费”无薪生产力OS、反刍循环,以及过于粗暴的“只图身体”标签
  3. 人体也太不方便了为什么没有“体力+1”,力量、耐力和心肺却要分别练?
  4. 西索明明是个变态,却是个"好前辈"?从贪婪之岛看他歪掉的带人方式

今天读这篇

每一篇都回答读完本文后常有的下一个问题。

浏览全部文章更多「AI」文章

查找其他文章

所有文章

Mendoi-chan

本站运营者

Mendoi-chan

把工作与日常生活中的麻烦整理成清晰的结构和下一步行动。