xsl
|
6b24bf0b0d
|
feat(gateway): 被动摘除后进入 60s 隔离期,防探测复活横跳
落地 docs/网关摘除隔离期实施方案.md(9·19 worker 磁盘满事故第 3 层防线):
- pool.py: WorkerState.offline_until + _cooldown_seconds();mark_worker_unhealthy
摘除时设隔离截止时刻,隔离期内探测成功也不复活(_try_revive 守卫)
- pool.py: 删除从未被调用的死代码 _check_worker_health/_mark_failure
- config.py + config.example.json: health_check.cooldown_seconds(默认 60,0=关闭)
- tests/test_gateway_pool.py: 9 用例(摘除设隔离/隔离内不复活/期满复活/整链路等)
网关机已重启验证:启动日志含"隔离期=60s",/gateway-health 正常。
|
2026-09-20 23:02:18 +08:00 |
|
Ubuntu
|
9379fbb8f8
|
save
|
2026-08-02 01:27:04 +08:00 |
|
 UbuntuandClaude
|
bb9f55e93c
|
feat(gateway): 全局串行化(并发=1) + 记录入参/出参/耗时日志
并发模型从「每worker并发1 + 多worker并行」改为全局串行:同一时间
只处理1个请求,其余排队;多 worker 仅作热备(主 worker 坏了才用备机)。
接口4(face/features) 走豆包、不占 GPU,不纳入串行。
- pool: asyncio.Semaphore(max_global_concurrency=1) + acquire/release_global_slot
(依赖单进程 uvicorn 部署,已在注释中标注)
- forward: proxy_request 最外层 acquire 全局槽、try/finally 全路径释放;
入参 multipart 解析挂 request.state;原重试/故障转移逻辑抽到 _dispatch_with_retries
- reqlog(新): 标量入参保留;图片(file/base64)存盘转URL,绝不内嵌base64;
出参递归摘要截断(landmarks/长串/大数组)
- logging_middleware: RequestLogEntry 加 request_params/response_data,
jsonl 全量记录;_load_from_logfile 同步映射防重启丢字段;get_stats recent 暴露
- /gateway-health 暴露 global_max/global_busy/global_waiting
- config: dispatch 新增 max_global_concurrency / max_queue_wait_seconds
- tests: test_reqlog + test_gateway_serialization(9 用例)
顺带提交此前未提交的网关统计(daily stats 接口)与耗时看板(api_timing_dashboard.html)。
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-23 22:56:48 +08:00 |
|
Ubuntu
|
68fe1c1406
|
feat(网关): 接口4 改由网关本机直接调豆包视觉模型,不再代理到 worker
- gateway/app.py: 接口4 handler 改为直接调用 face_features 模块
- face_features.py: API Key 读取支持 gateway/config.json
- gateway/config.example.json: 增加 ark_api_key 配置项
|
2026-06-15 20:46:12 +08:00 |
|
Ubuntu
|
cd4ca278d4
|
完成接口1 和接口2,测试页面也完成
|
2026-06-15 10:10:52 +08:00 |
|
Ubuntu
|
3b706ec0ef
|
网关开发完成
|
2026-06-14 15:04:34 +08:00 |
|