From f0444e5879827cd0ef5dad4e069d26e3ab01c3ae Mon Sep 17 00:00:00 2001 From: bigcode Date: Fri, 30 Oct 2026 14:49:55 +0800 Subject: [PATCH] =?UTF-8?q?stress:=20=E5=8F=8C=E8=B7=AF=E5=BE=84(fetch+?= =?UTF-8?q?=E6=B5=8F=E8=A7=88=E5=99=A8)24h=20=E8=87=AA=E9=80=82=E5=BA=94?= =?UTF-8?q?=E5=90=9E=E5=90=90=E4=BC=98=E5=8C=96=E6=B5=8B=E8=AF=95=E5=99=A8?= =?UTF-8?q?=20=E2=80=94=E2=80=94=20AIMD=20=E8=B0=83=E9=80=9F,>98%=20?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E7=8E=87=E7=BA=A6=E6=9D=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 走生产双路径原形态(runtime=auto 全池 LRU,令牌内 go-fetch/溢出温池浏览器), 与 serp-profile-capacity.ts 的单号 sticky+fetch 互补。 控制器每 60s 决策(30min 滚动窗口):成功率<95%×0.5/<98%×0.7、验证码波×0.7、 内部门壳尝试占比>15%×0.85 抢先退避、池空×0.85;干净时每 5 拍 ×1.08 加速,区间 [3,400] req/min。 smoke(dp0,7min)验证发现并修复:发出/完成同刻记账(在途请求跨桶虚报失败,高并发下 会把控制器系统性压到下限)+ 退避最少失败数门槛(低速率单次偶发失败不触发)。 --- stress/serp-dualpath-optimize.ts | 287 +++++++++++++++++++++++++++++++ 1 file changed, 287 insertions(+) create mode 100644 stress/serp-dualpath-optimize.ts diff --git a/stress/serp-dualpath-optimize.ts b/stress/serp-dualpath-optimize.ts new file mode 100644 index 0000000..a6cd48c --- /dev/null +++ b/stress/serp-dualpath-optimize.ts @@ -0,0 +1,287 @@ +/** # 脚本说明 + * SERP 双路径(fetch+浏览器)24h 自适应吞吐优化测试(用户 2026-10-30 目标): + * 在保证客户端成功率 >98% 的约束下,自适应逼近系统可持续的最大每分钟请求数。 + * 与 serp-profile-capacity.ts(单号 sticky+fetch,绕过池/令牌)不同,本脚本走生产 + * 双路径原形态(runtime=auto,无 sticky,全池 LRU 选号): + * GET /api/serp/json/search?q=...&num=10 + * 令牌内走 go-fetch(全局限流 fetchPerSec),限流外并发走温池浏览器 —— 组合即生产形态。 + * AIMD 控制器(每 60s 决策,30min 滚动窗口;加退避即时、加速每 5 分钟一步): + * 成功率<95% → 速率×0.5;<98% → ×0.7;验证码≥3/窗口 → ×0.7; + * 内部门壳尝试占比>15% → ×0.85(抢先退避,藏不住的门壳墙来临前减速); + * 池空>5/窗口 → ×0.85;成功率≥99.5% 且门壳占比<2% 且无池空/验证码 → ×1.08。 + * 速率区间 [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/