# Nexus Sprint 规划 — 2026-05-22 更新 > 本文档已更新反映实际代码状态,移除已完成项 --- ## 已完成的架构升级(本轮) | 升级 | 之前 | 之后 | 影响 | |------|------|------|------| | SSH 库 | paramiko (同步,阻塞事件循环) | asyncssh (异步,引用计数连接池) | 消除 47s health 响应延迟 | | 认证 | PHP Session + API Key | JWT + TOTP | 统一认证体系 | | 前端 | PHP AdminLTE | Tailwind CSS v4 + Alpine.js | 纯静态,零构建 | | 定时调度 | APScheduler | 自定义 schedule_runner + retry_runner | 原生异步,更轻量 | | WebSocket | 无 | 两层架构 (内存 + Redis Pub/Sub) | 实时告警推送 | | 数据库 Session | 泄漏 (4 个 service factory 不关) | DbSessionMiddleware 自动管理 | 消除连接池耗尽 | --- ## 当前连接池配置 ``` MySQL: pool_size=160, max_overflow=120 → 最大 280 连接 (基于 MySQL max_connections=400, install.php 自动计算: poolSize = max(20, maxConn * 0.4), overflow = max(20, maxConn * 0.3)) Redis: BlockingConnectionPool (ADR-008) 启动强校验,不可用直接退出 (ADR-009) asyncssh: MAX_CONNECTIONS=100 IDLE_TIMEOUT=300s (5min 空闲关闭) CLEANUP_INTERVAL=60s 推送并发: Semaphore(10) per batch batch_size=50, batch_interval=30s ``` --- ## 后台任务 | 任务 | 间隔 | 文件 | 说明 | |------|------|------|------| | heartbeat_flush | 10min | `background/heartbeat_flush.py` | Redis → MySQL 批量刷新 | | self_monitor | 30s | `background/self_monitor.py` | Redis/MySQL 检查 + 恢复通知 | | schedule_runner | 60s | `background/schedule_runner.py` | Cron 定时推送 | | retry_runner | 5min | `background/retry_runner.py` | 指数退避重试 | | asyncssh_cleanup | 60s | `ssh/asyncssh_pool.py` | 空闲连接清理 | --- ## 待完成项 ### P1 — 本周 | # | 项 | 工时 | 风险 | |---|-----|------|------| | 1 | WebSSH xterm.js 前端页面 | 2-3天 | 中 | | 2 | 推送前预览 (rsync dry-run --stats) | 0.5天 | 低 | ### P2 — 迭代 | # | 项 | 工时 | |---|-----|------| | 3 | install.php → install.html 迁移 | 1天 | | 4 | config.php → 纯 API(移除 PHP-FPM 依赖) | 2天 | | 5 | paramiko pool.py + requirements.txt 清理 | 0.5天 | | 6 | 命令日志查询页面 | 0.5天 | | ~~7~~ | ~~文件编辑器集成 (Monaco)~~ | **已否决** | --- ## 已否决(永久) | 项 | 原因 | |----|------| | RBAC 权限体系 | 保持"鉴权即信任" | | 移动端适配 | 运维不会用手机管理 2000 台服务器 | | MQTT 协议 | HTTP + Redis 已足够 | | 会话录像 asciicast | 不需要 | | APScheduler | 自定义 asyncio loop 更轻量 | | **文件编辑器(Monaco/ACE)** | **运维场景无需嵌入编辑器;远程文件通过 WebSSH / SFTP 处理(2026-05-23 明确否决)** |