/** # 脚本说明 * SERP 双路径(fetch+浏览器)24h 自适应吞吐优化测试(用户 2026-10-30 目标; * 2026-11-02 用户要求可用率约束上调至 >99%): * 在保证客户端成功率 >99% 的约束下,自适应逼近系统可持续的最大每分钟请求数。 * 与 serp-profile-capacity.ts(单号 sticky+fetch,绕过池/令牌)不同,本脚本走生产 * 双路径原形态(runtime=auto,无 sticky,全池公平负载选号): * GET /api/serp/json/search?q=...&num=10 * 令牌内走 go-fetch(全局限流 fetchPerSec),限流外并发走温池浏览器 —— 组合即生产形态。 * AIMD 控制器 v5(dp6 全天实测教训驱动;v4 基础上改四点): * 硬约束(成功率即约束本身):首次跌破 99%(失败≥2)×0.7、<96% ×0.5;退化段内续砍 * 需短窗 <96% 且全程增量新失败 ≥2 —— dp5 教训:同一波旧失败被短窗反复引用, * 五分钟连砍五刀 175→30/min,直接打灭浏览器溢出路径; * 软信号按事件段(episode)迟滞 + 绝对数护栏(低速率下 1~2 个噪音 = 高比率,不得触发): * 验证码 10min 窗 ≥3 个且占比>2% ×0.5、≥3 个且>0.5% ×0.7;门壳 ≥3 且占比>15% ×0.85; * 池空>5 ×0.85;软砍下限 SOFT_FLOOR=25 —— 背景验证码供给恒定,速率越低比率越高, * 比率规则在低位永真(dp5 实测 12:00-17:00 自 52/min 自残至 3/min); * 干净爬坡:不在退化段 且 短窗干净 且 无池空 且(验证码 0 个或样本 ≥300)→ 向「干净 * 水位」(30min 窗 ≥99.5% 时的最高速率)以 ×1.3/拍快速回收,水位之上每 5 拍 ×1.08。 * v5 修 dp6 实测「低速恢复锁死」:短窗成功率 ≥99.5% 在低速涓流下永不可达 * (05:00-06:10 滞留 70min 在 24-42/min,该小时实际 98.86%)→ 增加备选条件 * 「验证码 ≤1 个且短窗 ≥98.5%」(稀释论:同量涓流在高速率下占比可忽略,可爬)。 * 速率区间 [3, 400] req/min;并发 worker 默认 12(真实并发让溢出自然流向浏览器路径)。 * 判定(客户端,JSON 出口):ok = 200 且 organic>0;gate = 200 且 organic=0 且 * attempts 含 gate;empty = 200 且 organic=0 无门壳尝试;错误按响应 code 分类 * (CAPTCHA_DETECTED / SERP_POOL_EMPTY / 其余 httpErr);网络层失败记 netErr。 * 输出:data/