Skip to content

存储策略

这一篇覆盖"文件存到哪"的两层

  • 管理 -> 存储策略 —— 文件真正存到哪里(本地 / S3 / 远程节点)
  • 管理 -> 策略组 —— 用户或团队上传时命中哪条存储策略

用户和团队不是直接绑存储策略,而是绑策略组;策略组再按规则把上传分到具体策略。

第一次启动后默认会有什么

新部署实例第一次启动后,系统会自动准备:

  • 默认本地存储策略 Local Default
  • 默认策略组 Default Policy Group

什么都不改的话:新用户自动绑默认策略组,再由默认策略组把上传分到默认本地存储策略。系统管理员创建新团队时,没手动指定就用默认策略组。

当前支持的三类存储

类型说明
local文件存到本地目录
s3文件存到 S3 或兼容对象存储(MinIO / R2 / B2 / OSS / COS 等)
remote文件通过内部远程存储协议写到另一台 AsterDrive 从节点

只改存储策略 vs 还要改策略组

  • 只想改"文件最终落到哪种存储后端" —— 看存储策略
  • 想让不同用户、团队、文件大小走不同路线 —— 策略组也要配

后台典型操作顺序:

  1. 创建或测试好存储策略
  2. 创建策略组规则
  3. 把用户或团队绑定到目标策略组

存储策略的常见选项

项目作用
名称后台显示名
驱动类型locals3remote
连接信息本地目录 / S3 endpoint、bucket、密钥 / 绑定的远程节点
单文件大小上限允许上传的最大文件;0 = 不限
分片大小大文件上传时每一片的大小
默认策略新建默认组或默认分流规则会优先使用
附加选项本地内容去重、S3 上传/下载方式、远程上传/下载方式等

三类存储怎么选

local

适合单机、NAS、文件直接落本地磁盘。

内容去重默认关闭

开启后:上传完成后再读一遍临时文件并算内容指纹,相同内容复用同一份底层文件,省盘。

保持关闭:上传路径更直接,不会多一次全文件读取,相同内容会分别存。

家用、单机部署多半不需要去重;多人重复传相同素材的小团队可以开。

s3

适合文件放到 MinIO、AWS S3 或其他兼容对象存储。

remote

适合把控制面留在主控节点,把真实对象落点拆到另一台 AsterDrive 从节点。

要点先记住三件事:

  • 策略本身只绑定远程节点,不再单独填 endpoint 或 access key
  • follower 真正把对象写到哪里,由远程节点详情里的默认接收落点决定
  • 远程下载支持 relay_streampresigned
  • 远程上传支持 relay_streampresigned;其中 presigned 需要浏览器能直达从节点

要真正用起来,先到 管理 -> 远程节点 把节点登记好,并确保它已经接入、启用、配置了可访问的 base_url,还至少有一个已应用的默认接收落点。完整流程看 远程节点

S3 的上传方式

服务端流式中继 relay_stream

浏览器先把文件传给 AsterDrive,服务端再中继到 S3。正常路径不落本地临时目录,也不做内容去重。

适合浏览器到 S3 之间网络不稳,或者你想让所有出入口都经过应用节点。

Presigned 直传 presigned

浏览器直接上传到 S3 / MinIO。不大于分片大小时单次上传,更大的文件自动走 S3 分片上传。

用 presigned 前先配 CORS

对象存储那一侧要配好浏览器上传的 CORS:

  • 允许上传来源
  • 允许 PUT
  • ExposeHeaders 包含 ETag

不配 CORS,浏览器直接报跨域错误。

S3 的下载方式

服务端中继下载 relay_stream

AsterDrive 先从对象存储读,再把字节流回传给浏览器。适合需要由应用节点继续控制响应头、同源下载行为或下游网络策略的场景。

Presigned 重定向 presigned

AsterDrive 先做权限校验,再把浏览器重定向到一个短时效的 S3 GET URL。下载带宽和长连接压力交给对象存储,但响应头和缓存行为也更多落到对象存储这一侧。

当前边界要清楚

  • 登录态文件下载、团队下载、分享下载 —— 按存储策略分流
  • 公开直链 /d/... —— 默认 inline 仍走服务端响应;追加 ?download=1 后会复用附件下载分流,命中 presigned 时返回重定向
  • 预览链路 /pv/... —— 仍然走服务端响应,不会重定向
  • 分享下载次数 —— 在生成可用下载响应后计数;命中 304 不增加

presigned 下载前确认:

  • 客户端网络能直连对象存储
  • 对象存储允许返回期望的 Content-Disposition / Content-Type
  • 你已经接受下载缓存行为更多由对象存储响应头决定

远程节点的上传方式

纯流式转发 relay_stream

浏览器先把文件传给主控节点,主控节点再直接流式转发到从节点。
中间不生成完整文件中转副本,但链路强依赖浏览器到主控、主控到从节点两段网络都稳定。

Presigned 直传 presigned

浏览器直接把文件上传到从节点。
这样能减轻主控节点的上传压力,但前提是浏览器能访问从节点,而且从节点要正确暴露上传所需的响应头。

远程节点的接收落点

远程存储策略解决的是“主控把流量发给哪台 follower”。
接收落点解决的是“这台 follower 收到对象后写到哪里”。

入口在:

text
管理 -> 远程节点 -> 打开某台节点 -> 主控指定的接收落点

当前接收落点支持:

  • local:写到 follower 本地目录
  • s3:写到 follower 能访问的对象存储

local 接收落点的基础路径只能填相对路径,最终会落在 follower 的 server.follower.managed_ingress_local_root 下面。
如果没有默认接收落点,远程写入会被拒绝;如果默认接收落点还在“等待应用”或“应用失败”,也不要急着把生产流量切过去。

远程节点的下载方式

服务端中继下载 relay_stream

主控节点先从从节点拉对象,再把字节流回传给浏览器。
适合需要继续由主控端掌控响应头、同源下载行为或下游网络策略的场景。

Presigned 重定向 presigned

AsterDrive 先做权限校验,再把浏览器重定向到一个短时效的从节点下载地址。
这样能减轻主控节点的下载带宽压力,但最终响应头和缓存行为会更多落到从节点这一侧。

策略组怎么理解

策略组 = 一组有序规则。每条规则指定:

  • 命中哪条存储策略
  • 优先级
  • 适用的文件大小范围

最简单的策略组只有一条规则:任意大小的文件都走 Local Default

更常见的进阶组合:

  • 小文件走本地存储(响应快、不用过外网)
  • 大文件走 S3 / MinIO(节省本地磁盘)
  • 某些团队单独走远程节点(把控制面和真实落点拆开)
  • 某些团队绑定独立策略组,和个人空间分开走

用之前一定注意这几件事

  • 本地存储目录长期部署建议写绝对路径;如果写相对路径,先确认服务进程的工作目录
  • 本地策略默认关内容去重;要省盘才开
  • presigned 上传前配好对象存储 CORS
  • presigned 下载前确认客户端能直连对象存储,并接受带宽从 AsterDrive 节点转移到对象存储
  • 远程策略先确认绑定的远程节点已经接入、启用,base_url 可达,并且有已应用的默认接收落点
  • 远程 presigned 上传/下载前,确认浏览器能直连从节点
  • 本地存储 / 服务端临时处理路径要留够本地临时目录空间
  • S3 的两种上传方式都不做内容去重
  • 单文件大小限制、策略组规则、用户/团队配额都会影响上传成败

哪些修改不要直接做

已经有文件写入的策略,不要改这些

  • 本地目录
  • Bucket
  • Endpoint
  • 绑定的远程节点

旧文件按原位置读取,直接改位置 = 已有文件全部找不到。

更稳的做法:

  1. 新建一条策略
  2. 迁移旧数据
  3. 把用户或团队切到新策略所在的策略组

日常维护

  • 至少保留一条可用的默认存储策略
  • 至少保留一个启用中的默认策略组
  • 保存前先做一次连接测试
  • 给不同用户/团队分配不同存储路线时,到 管理 -> 用户管理 -> 团队 里绑策略组

基于 MIT 许可证发布