Files
Nexus/docs/reports/step-0-infrastructure/engineering-report.md
T
Your Name 3ecd3d75d4 docs: reports + research + team roster + tech-stack evaluation
Add implementation progress reports, review reports (CTO/quality/deploy),
session log, signoff table, team roster, collaboration charter,
tech-stack evaluation and inventory, research reports.
Remove obsolete multisync_server.py.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 22:12:29 +08:00

2.2 KiB
Raw Blame History

第零步:基础设施加固 — 工程部工作报告

日期: 2026-05-21 部门: 工程部 负责人: CTO 任务编号: R1-R5


工作人员

姓名 角色 任务编号 签名
FastAPI开发 R1, R4, R5
后端架构师 R2
软件架构师 R3

仅实际参与工作人员签名,未参与者不列入。

工作内容

R1: Redis BlockingConnectionPool 替换

  • 重写 server/infrastructure/redis/client.py
  • 使用 BlockingConnectionPool(max_connections=50, timeout=5, health_check_interval=30)
  • 新增 init_redis(app) 在 lifespan 启动时调用
  • 新增 close_redis() 在 shutdown 时调用

R2: get_redis() 启动强校验

  • 去掉 Redis | None 返回类型 → 直接返回 Redis
  • 启动时 ping 验证,失败直接 SystemExit
  • 新增 get_redis_sync() 安全变体(graceful shutdown 用)

R3: WebSocket 两层架构

  • Layer 1: ConnectionManager 内存管理器(per-worker
  • Layer 2: Redis Pub/Sub nexus:alerts 频道中继
  • start_redis_subscriber() / stop_redis_subscriber() 在 lifespan 管理

R4: WebSocket ping/pong 心跳

  • 每 30s 发送 ping
  • 60s 无 pong → 僵尸连接清理
  • _heartbeat_loop() 自动管理

R5: WebSocket JWT 认证

  • /ws/alerts?token=xxx 查询参数传递 JWT
  • _verify_ws_token() 复用 JWT 验证逻辑

D7: DB Session 泄漏修复(合并到本步骤)

  • DbSessionMiddleware 在 main.py 中间件
  • request.state.db 注入 session
  • dependencies.py 4 个 service 工厂改用 _get_request_session(request)

交付物

  • server/infrastructure/redis/client.py — Redis客户端重写
  • server/api/websocket.py — WebSocket两层架构
  • server/main.py — lifespan + 中间件
  • server/api/dependencies.py — Session泄漏修复
  • server/api/servers.py — 使用新get_redis()
  • server/api/agent.py — 使用新get_redis()
  • server/api/health.py — 统一检查
  • server/background/heartbeat_flush.py — 使用新get_redis()
  • server/background/self_monitor.py — 使用新get_redis()
  • server/application/services/sync_service.py — 使用新get_redis()

验收意见

待测试部验证