Skip to content

架构设计

系统概述

SimpleShare 是一个基于 Cloudflare Serverless 边缘计算架构的分布式对象存储与文件分发系统。

核心设计原则

1. 存算分离

彻底将文件元数据与文件实体剥离:

  • 元数据:存储在 Cloudflare D1 分布式数据库中
  • 文件实体:存储在 Cloudflare R2 对象存储中

2. 边缘计算

利用 Cloudflare D1 分布式数据库,确保全球范围内的低延迟查询。

3. 极致成本控制

充分利用 R2 提供的 10GB 免费对象存储额度,实现高性能、全球加速的文件分发效果。

技术栈

前端

  • Vue 3: 渐进式 JavaScript 框架
  • Pinia: 状态管理
  • Tailwind CSS: 实用优先的 CSS 框架
  • Vite: 下一代前端构建工具

后端

  • Cloudflare Workers: 边缘计算运行时
  • Cloudflare D1: 分布式 SQLite 数据库
  • Cloudflare R2: 对象存储服务

认证与安全

  • JWT: 基于 JSON Web Token 的身份认证
  • HMAC-SHA256: 用于生成安全令牌

系统架构图

┌─────────────┐
│   用户浏览器   │
└──────┬──────┘


┌─────────────────────────────────┐
│   Cloudflare Workers (边缘计算)    │
│  ┌─────────────────────────────┐ │
│  │   API 路由处理               │ │
│  │   - 认证/授权                │ │
│  │   - 文件元数据管理           │ │
│  │   - 预签名 URL 生成          │ │
│  └─────────────────────────────┘ │
└──────┬──────────────────┬────────┘
       │                  │
       ▼                  ▼
┌─────────────┐   ┌─────────────┐
│ Cloudflare D1│   │ Cloudflare R2│
│  (元数据)     │   │  (文件存储)  │
└─────────────┘   └─────────────┘

数据流

文件上传流程

  1. 用户在前端选择文件
  2. 前端请求上传接口,获取预签名 URL
  3. 前端直接上传文件到 R2(使用预签名 URL)
  4. 上传完成后,前端通知后端更新元数据
  5. 后端在 D1 中记录文件元数据

文件下载流程

  1. 用户请求下载文件
  2. 后端从 D1 查询文件元数据
  3. 后端生成预签名下载 URL
  4. 前端重定向到预签名 URL
  5. 文件直接从 R2 下载(零带宽消耗)

安全机制

1. 认证

  • 基于 JWT 的无状态认证
  • Token 存储在 HTTP-only Cookie 中

2. 授权

  • 基于角色的访问控制(RBAC)
  • 用户、管理员角色分离

3. 文件安全

  • 预签名 URL 有时效性
  • 文件访问权限验证
  • 分享链接使用随机提取码

4. 令牌安全

  • 无状态重置令牌(基于 HMAC)
  • 版本指纹失效机制
  • 令牌仅当天有效

存储后端

系统支持多种存储后端:

  • Cloudflare R2: 默认存储后端
  • AWS S3: 兼容 S3 协议
  • WebDAV: 支持 WebDAV 协议
  • 自定义后端: 可扩展的存储适配器

性能优化

  1. 边缘缓存: 利用 Cloudflare 全球 CDN
  2. 预签名 URL: 减少服务器带宽消耗
  3. 数据库索引: D1 数据库优化查询性能
  4. 懒加载: 前端组件按需加载