节点在线、应用在线、配置在线使用令牌查询
大石头 authored at 2021-12-16 19:49:30
3.46 KiB
Stardust
# PUB-21 分布式文件存储 > 版本:v1.0 | 日期:2026-07-15 > 对应需求:PUB-21 分布式文件存储(用于附件管理) --- ## 背景 在分布式部署场景,应用部署多台服务器共用数据库,文件上传只存储在某一台服务器本地,其他节点无法获取文件。引入 NAS/OSS 等集中存储方案增加了部署维护成本。 ## 解决方案 Stardust 实现了轻量级的**分布式文件存储**方案,基于**写扩散**架构,通过事件总线自动同步文件到所有节点,无需依赖外部存储服务。 ### 核心特性 1. **无中心化存储**:每个节点都存储完整文件副本,无需 NAS/OSS 2. **写扩散架构**:文件上传后自动广播到所有节点 3. **自动同步**:新节点加入后自动拉取缺失文件 4. **故障自愈**:文件丢失时可向集群请求重新同步 5. **灵活配置**:可配置节点仅提供服务或仅拉取文件 ### 架构设计 ``` ┌─────────────────────────────────────────────────────────────┐ │ 事件总线 (Redis) │ │ ┌──────────────────────┐ ┌────────────────────────┐ │ │ │ IEventBus<NewFileInfo>│ │ IEventBus<FileRequest> │ │ │ └──────────────────────┘ └────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ ↑ ↓ ↑ ↓ ┌──────┴────┐ └────────┐ ┌────┴────┐ └────────┐ │ 节点 A │ │ 节点 B │ │ 节点 C │ │ 节点 D │ │ /Uploads │ │ /Uploads│ │ /Uploads│ │ /Uploads│ └───────────┘ └─────────┘ └─────────┘ └─────────┘ ↓ ↓ ↓ ↓ ┌──────────────────────────────────────────────────────────┐ │ 共享数据库 (MySQL) │ │ Attachment 附件表 │ └──────────────────────────────────────────────────────────┘ ``` ### 工作流程 **文件上传**:用户 → 节点A → 保存文件 → 写入附件表 → 发布 NewFileInfo → 事件总线 → 其他节点同步 **文件自愈**:节点D访问文件 → 文件缺失 → 发布 FileRequest → 事件总线 → 有文件的节点响应 → 节点D下载保存 **新节点加入**:定时扫描附件表 → 发现本地缺失文件 → 逐个发布 FileRequest → 从现有节点同步 ## 相关代码 - `Stardust.Server/Services/FileStorageService.cs` — 文件存储服务 - `Stardust/Storages/` — 存储接口与实现