feat(all): 源精度命名体系、工作流可观测台、节点停用管理与白名单归档

核心变更:

  1. GridAxisValue 源精度命名
     - 新增 GridAxisValue 类型,携带 f64 数值 + YAML 源书写文本(Deref 透明兼容算术)
     - config.rs 绕过 serde_yaml 归一化,逐 token 捕获轴值原文(logg: 5.0 → g5.0)
     - runner/executor/scheduler 全链路改用 DB TEXT 列权威 point_name,
       修复 REAL 列回读丢精度导致的 model_name 错配

  2. 工作流执行可观测台
     - 新增 stats/progress/points 三组 API(进度时间序列、经验速率 ETA、
       停滞预警、逐点明细分页、收敛性热力图数据)
     - 新增 workflow_progress_snapshots 表 + tasks/grid_points 耗时列
     - runner 携带 last_iter/worst_depth/n_depths 进 conv.json
     - 前端新增 hash 路由、工作流详情页(概览/网格点/收敛分析三 Tab)、YAML 编辑器

  3. 节点停用/启用管理
     - 新增 disabled 状态 + disable/enable API;停用节点保持心跳但停止分发,
       worker 空闲待命而非退出;移除 revoke API,token 失效统一走重发覆盖;
       移除 host_name 字段

  4. 白名单结果归档
     - 新增 result_filter 模块,只归档有语义产物,丢弃 Tlusty 中间单元(~2MB/模型)
     - executor 原子写入归档 + 200 点 LRU 上限

  5. 历史数据导入
     - sync_seeds 重写为 import_results:经 /admin/import_seed 标记 converged +
       按新版命名迁移产物树

  6. 部署与目录重规划
     - data/results→seeds、data/archive→result + migrate_data_dirs.sh
     - deploy.sh 增强(SSH 复用、Profile、远程 env);Dockerfile 瘦身

  7. 文档同步更新 api/database/architecture/deployment
This commit is contained in:
fmq
2026-07-31 01:34:05 +08:00
parent b91f1e4fa5
commit 1bfa240cb0
73 changed files with 12332 additions and 1608 deletions
+19 -17
View File
@@ -20,7 +20,7 @@ cargo build --release
编译产物位于 `target/release/`
- `server`:调度与 API 主服务端
- `node`:计算节点后台进程
- `sync_seeds`:种子同步管理工具
- `import_results`:历史计算结果导入工具(旧版单机网格结果 → 标记已完成 + 迁移产物树)
### 2. 构建前端与启动服务端 (Master & Web Dashboard)
首先编译前端全域实时网格可视图看班:
@@ -58,28 +58,31 @@ DCTS 采用**分层鉴权**模型,公网部署务必按下表配置凭据。
| 主体 | 环境变量 | 用途 | 持有方式 |
| :--- | :--- | :--- | :--- |
| **Admin** | `DCTS_ADMIN_TOKEN` | Dashboard 登录、工作流 CRUD、起停计算 | 人工,Dashboard 输入 |
| **Enrollment** | `DCTS_ENROLLMENT_TOKEN` | 节点首次注册领取专属 token | 部署脚本/人工 |
| **Node** | _(服务端自动颁发)_ | 心跳、领任务、上报、下载数据 | 节点本地 `.node_token` 文件(权限 600 |
| **Admin** | `DCTS_ADMIN_TOKEN` | Dashboard 登录、工作流 CRUD、起停计算、节点审批授权 | 人工,Dashboard 输入 |
| **Node** | _(服务端审批后自动颁发)_ | 心跳、领任务、上报、下载数据 | 节点本地 `.node_token` 文件(权限 600 |
> **兼容**:旧变量 `DCTS_AUTH_TOKEN` 仍有效,自动同时充当 Admin + Enrollment 凭据(建议迁移到上面两个独立变量)。
> **兼容**:旧变量 `DCTS_AUTH_TOKEN` 仍有效,自动回退用作 Admin 凭据(建议迁移到 `DCTS_ADMIN_TOKEN`)。
### 节点注册流程(L2
### 节点注册流程(免凭据申请 + 管理员审批
1. 启动时优先读取本地 `runtime/.node_token`;不存在则`DCTS_ENROLLMENT_TOKEN``/api/node/register`
2. 服务端注册成功后**颁发该节点专属 token**(仅返回一次,DB 只存 SHA-256 hash,节点持久化到 `.node_token`
3. 后续所有请求携带专属 token;服务端按 token 反查 `node_id` 鉴权
4. **吊销/重发**:通过 Dashboard「节点凭据管理」面板或下方管理 API 操作
1. 节点启动时优先读取本地 `runtime/.node_token`;不存在则**免凭据**向 `/api/node/register` 提交注册申请,进入 `pending_approval` 待审批状态
2. 管理员在 Dashboard「节点管理」面板点击【同意接入】后,服务端**颁发该节点专属 token**(仅返回一次,DB 只存 SHA-256 hash)。
3. 节点轮询 `/api/node/check_status` 取回专属 token 并持久化到 `.node_token`(权限 600
4. 后续所有请求携带专属 token;服务端按 token 反查 `node_id` 鉴权
5. **重发/停用**:通过 Dashboard「节点凭据管理」面板或下方管理 API 操作。
### 节点凭据管理 APIAdmin 角色)
| 方法 | 路径 | 说明 |
| :--- | :--- | :--- |
| GET | `/api/admin/nodes` | 列出全部节点及凭据状态(在线/token 有效/吊销/颁发时间) |
| POST | `/api/admin/nodes/:node_id/revoke` | 吊销指定节点 token(立即失效,幂等) |
| POST | `/api/admin/nodes/:node_id/reissue` | 重新颁发 token,返回新明文(旧 token 失效) |
| GET | `/api/admin/nodes` | 列出全部节点及凭据状态(在线/token 有效/颁发时间) |
| POST | `/api/admin/nodes/:node_id/approve` | 同意待审批节点的接入申请并颁发 token |
| POST | `/api/admin/nodes/:node_id/reject` | 拒绝待审批节点的接入申请 |
| POST | `/api/admin/nodes/:node_id/reissue` | 重新颁发 token,返回新明文(旧 token 立即失效) |
| POST | `/api/admin/nodes/:node_id/disable` | 停用节点(保持在线但不再分发任务,可恢复) |
| POST | `/api/admin/nodes/:node_id/enable` | 重新启用被停用的节点 |
所有端点要求 Admin token`Authorization: Bearer <DCTS_ADMIN_TOKEN>`)。被攻陷节点持有的 node token 无权访问这些端点,因此吊销/重发始终是管理员主动行为。
所有端点要求 Admin token`Authorization: Bearer <DCTS_ADMIN_TOKEN>`)。被攻陷节点持有的 node token 无权访问这些端点,因此重发/停用始终是管理员主动行为。
### 公网部署清单
@@ -89,9 +92,8 @@ openssl rand -hex 32
```
```env
# .env(服务端 + 节点共享此文件时各自读取所需变量
# .env(服务端配置;计算节点无需任何凭据,免凭据申请后由管理员审批授权
DCTS_ADMIN_TOKEN=<强随机值>
DCTS_ENROLLMENT_TOKEN=<强随机值>
```
**TLS 反代**(推荐 Caddy,自动 HTTPS):
@@ -122,7 +124,7 @@ docker compose --profile public up -d --build
| [`node`](crates/node/README.md) | Binary | Worker 节点 Daemon 进程,负责任务抢占、自适应环境预热、计算链执行与产物汇报 | [README](crates/node/README.md) |
| [`mq`](crates/mq/README.md) | Library | 基于 SQLite 构建的高可靠事务型分布式任务队列引擎 | [README](crates/mq/README.md) |
| [`dashboard`](dashboard/index.html) | Web UI | 基于 Vite 与原生高交互前端语系创写的分层式恒星网格任务可观测可视化控表空间 | [说明详情](dashboard/package.json) |
| [`sync_seeds`](tools/sync_seeds/README.md) | Tool CLI | 离线 / 增量种子数据文件(`.7`)高效率同步工具 | [README](tools/sync_seeds/README.md) |
| [`import_results`](tools/import_results/README.md) | Tool CLI | 历史计算结果导入工具(旧版单机网格结果 → 标记已完成 + 迁移产物树) | [README](tools/import_results/README.md) |
---