Files
Nexus/docs/design/specs/2026-05-19-sprint-planning.md
T
2026-07-08 22:31:31 +08:00

2.8 KiB
Raw Blame History

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 明确否决)