架构设计
系统概述
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│
│ (元数据) │ │ (文件存储) │
└─────────────┘ └─────────────┘数据流
文件上传流程
- 用户在前端选择文件
- 前端请求上传接口,获取预签名 URL
- 前端直接上传文件到 R2(使用预签名 URL)
- 上传完成后,前端通知后端更新元数据
- 后端在 D1 中记录文件元数据
文件下载流程
- 用户请求下载文件
- 后端从 D1 查询文件元数据
- 后端生成预签名下载 URL
- 前端重定向到预签名 URL
- 文件直接从 R2 下载(零带宽消耗)
安全机制
1. 认证
- 基于 JWT 的无状态认证
- Token 存储在 HTTP-only Cookie 中
2. 授权
- 基于角色的访问控制(RBAC)
- 用户、管理员角色分离
3. 文件安全
- 预签名 URL 有时效性
- 文件访问权限验证
- 分享链接使用随机提取码
4. 令牌安全
- 无状态重置令牌(基于 HMAC)
- 版本指纹失效机制
- 令牌仅当天有效
存储后端
系统支持多种存储后端:
- Cloudflare R2: 默认存储后端
- AWS S3: 兼容 S3 协议
- WebDAV: 支持 WebDAV 协议
- 自定义后端: 可扩展的存储适配器
性能优化
- 边缘缓存: 利用 Cloudflare 全球 CDN
- 预签名 URL: 减少服务器带宽消耗
- 数据库索引: D1 数据库优化查询性能
- 懒加载: 前端组件按需加载