这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
数据生命周期管理
凌晨两点的告警短信
那是”光影”上线第 3 个月的一个凌晨,手机疯狂震动:
Inbox
From: 阿里云监控
To: 我
Time: 凌晨 02:15
Subject: [告警] OSS 存储容量超过阈值
- 当前容量:1.89 TB / 告警阈值:1.50 TB
- 增长率:+12 GB/天
- 预计 30 天后达到 2.25 TB
- 请及时处理!
12 GB/天?我仔细查了一下,发现存储增长的主要来源并不是用户上传的新图片——而是垃圾文件:
87% 的存储增长是垃圾文件。 这不是存储的问题,是管理的问题。
我需要一套完整的生命周期管理机制。
生命周期管理的全景图
一个图片从诞生到消亡,应该经历这样的生命周期:
┌──────────────┐
│ 用户上传 │
└──────┬───────┘
│
┌──────▼───────┐
│ 临时存储 │ ← 分片上传的临时空间
│ (temp/) │
└──────┬───────┘
│ 上传完成
┌──────▼───────┐
│ 内容审核 │ ← 鉴黄、OCR、版权
└──────┬───────┘
│ 审核通过
┌──────────▼──────────┐
│ 标准存储(热) │ ← 新图片,频繁访问
│ originals/ │
│ thumbs/ │
└──────────┬──────────┘
│ 30 天无人访问
┌──────────▼──────────┐
│ 低频存储(温) │ ← 偶尔有人翻看
│ originals/ │
└──────────┬──────────┘
│ 90 天无人访问
┌──────────▼──────────┐
│ 归档存储(冷) │ ← 几乎没人看
│ originals/ │
└──────────┬──────────┘
│ 2 年以上无人访问
┌──────────▼──────────┐
│ 删除 │ ← 释放存储空间
└────────────────────┘
临时文件的生命周期(独立路径):
┌──────────┐ 7 天
│ temp/ │ ──────────→ 删除
└──────────┘
缩略图的生命周期:
┌──────────┐ 随原图删除
│ thumbs/ │ ──────────→ 一起删除
└──────────┘生命周期规则配置
OSS 原生生命周期规则
阿里云 OSS 提供了内置的生命周期管理功能,可以在控制台或通过 SDK 配置:
应用层生命周期管理
OSS 原生规则只管存储层,但有些逻辑需要在应用层处理:
TypeScript 版本:面向前端的过期文件检测
前端也需要感知图片的生命周期状态,特别是对于过期/归档的图片:
存储空间监控和告警
生命周期管理的最后一环是监控。你无法管理你看不见的东西:
实施效果
生命周期管理上线后,我把配置写入代码仓库,用 Terraform 管理: