flowchart TB
UI[Web / App / NAS本地界面] --> GW[API Gateway / BFF]
GW --> AUTH[认证鉴权层]
GW --> ORCH[Download Orchestrator\n下载编排服务]
GW --> WS[WebSocket Push\n状态推送服务]
ORCH --> TASK[Task Service\n统一任务服务]
ORCH --> ROUTER[Protocol Router\n协议识别路由]
ORCH --> POLICY[PT Safety Guard\nPT安全策略]
ORCH --> CONFLICT[Conflict Resolver\n重复任务/冲突处理]
ORCH --> SCHED[Scheduler / Queue Manager\n调度与队列]
ORCH --> EVENT[Event Bus\n事件总线]
ORCH --> FILE[File Link Service\n打开目录/文件联动]
ORCH --> NOTICE[Notification Service\n通知服务]
ORCH --> LOG[Log & Diagnostics\n日志诊断服务]
ORCH --> SETTING[Settings Service\n设置中心]
ROUTER --> QBADAPTER[qB Adapter\nBT/PT/Magnet适配层]
ROUTER --> ARIA2ADAPTER[aria2 Adapter\nHTTPS适配层]
ROUTER --> SHAREADAPTER[Share Adapter\n品牌分享适配层]
QBADAPTER --> QB[qBittorrent-nox]
ARIA2ADAPTER --> ARIA2[aria2 daemon]
SHAREADAPTER --> SHAREAPI[品牌分享系统接口]
TASK --> DB[(SQLite / Task DB)]
EVENT --> DB
LOG --> DB
SETTING --> DB
CONFLICT --> DB
FILE --> FS[文件系统 / NAS目录权限]
QB --> FS
ARIA2 --> FS
SHAREAPI --> FS
NOTICE --> NC[系统通知中心]
WS --> UI
flowchart LR
subgraph 接入层
A1[REST API]
A2[WebSocket]
A3[鉴权中间件]
end
subgraph 业务编排层
B1[统一任务模型]
B2[任务创建流程]
B3[任务控制流程\n暂停/恢复/删除/重试]
B4[状态机管理]
B5[错误码标准化]
B6[多端状态同步]
end
subgraph 协议能力层
C1[qB Adapter]
C2[aria2 Adapter]
C3[Share Adapter]
end
subgraph 基础能力层
D1[权限校验]
D2[目录检查]
D3[通知]
D4[日志与埋点]
D5[设置中心]
D6[任务恢复]
end
subgraph 持久化与外部依赖
E1[(SQLite)]
E2[qBittorrent-nox]
E3[aria2]
E4[品牌分享接口]
E5[文件系统]
E6[通知中心]
end
A1 --> B1
A2 --> B6
A3 --> D1
B1 --> C1
B1 --> C2
B1 --> C3
B2 --> D2
B3 --> C1
B3 --> C2
B3 --> C3
B4 --> E1
B5 --> E1
B6 --> A2
C1 --> E2
C2 --> E3
C3 --> E4
D2 --> E5
D3 --> E6
D4 --> E1
D5 --> E1
D6 --> E1
| 模块 | 职责 | 关键输入 | 关键输出 |
|---|---|---|---|
| API Gateway / BFF | 给 Web/App 提供统一接口 | 请求、用户身份 | REST 响应、WebSocket 订阅 |
| Auth / AuthZ | 登录态、目录权限、任务可见范围校验 | 用户、目录、任务 | allow / deny |
| Download Orchestrator | 总控创建、调度、状态流转、错误收敛 | 创建请求、控制请求、引擎回调 | 统一任务事件 |
| Task Service | 维护统一任务模型 | 引擎状态、用户操作 | task record |
| Protocol Router | 识别 magnet / torrent / https / share link | 原始输入 | 路由到对应 adapter |
| PT Safety Guard | private torrent 风险策略控制 | torrent metadata、系统设置 | PT 安全策略快照 |
| Conflict Resolver | 重复任务、同名冲突处理 | infohash、文件名、保存目录 | 冲突处理策略 |
| Scheduler / Queue Manager | 活跃下载数/做种数限制 | 全局设置、当前任务集 | waiting / active 调度结果 |
| qB Adapter | 对接 qB API,处理 BT/PT/Magnet | 任务命令 | torrent 状态、tracker、ratio |
| aria2 Adapter | 对接 aria2 RPC,处理 HTTPS | 任务命令 | 下载状态、续传信息 |
| Share Adapter | 对接品牌分享接口 | 分享链接、提取码 | 转存结果 / 降级下载 |
| Notification Service | 完成/失败通知 | 任务事件 | 系统通知 |
| File Link Service | 打开目录、跳转文件管理 | save_path | 文件管理联动动作 |
| Log & Diagnostics | 聚合日志、错误快照、诊断信息 | 引擎日志、系统事件 | 最近日志、错误摘要 |
| Settings Service | 管理默认目录、限速、并发、端口、做种规则 | 配置请求 | 生效配置 |
| Recovery Service | 重启后任务恢复、引擎对账 | DB 快照、引擎当前状态 | 恢复后的统一状态 |
615 更建议先做成 单体服务 + 内部模块化:
download-orchestrator
qbittorrent-noxaria2textserver/ ├─ cmd/ │ └─ downloaderd/ ├─ internal/ │ ├─ api/ │ │ ├─ http/ │ │ ├─ websocket/ │ │ └─ middleware/ │ ├─ app/ │ │ ├─ task/ │ │ ├─ orchestrator/ │ │ ├─ scheduler/ │ │ ├─ policy/ │ │ ├─ conflict/ │ │ ├─ notify/ │ │ ├─ filelink/ │ │ ├─ settings/ │ │ └─ recovery/ │ ├─ adapter/ │ │ ├─ qb/ │ │ ├─ aria2/ │ │ └─ share/ │ ├─ domain/ │ │ ├─ task/ │ │ ├─ event/ │ │ ├─ enum/ │ │ └─ errorcode/ │ ├─ infra/ │ │ ├─ db/ │ │ ├─ logger/ │ │ ├─ config/ │ │ └─ eventbus/ │ └─ bootstrap/ └─ migrations/
615 真正必须先做好的,不是全部模块,而是下面 8 个:
API Gateway / BFFDownload OrchestratorTask ServiceProtocol RouterqB Adapteraria2 AdapterShare AdapterRecovery + Notification其余模块可以先内嵌在 orchestrator 中,以后再独立抽出。
本文作者:oyph
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!