Cloud Storage Retention
云存档位
| Plan | History | Access Window |
|---|---|---|
| Local | No cloud history | N/A |
| Starter (Daily Backup) | 24-hour cloud history | cloudPlaybackQuota = 1 |
| Standard | 7-day cloud history | cloudPlaybackQuota = 7 |
| Premium | 30-day cloud history | cloudPlaybackQuota = 30 |
AWS KVS Physical Retention 策略
所有设备的 KVS stream 统一使用 720 hours (30 days) 作为 physical retention。
为什么统一 720h
- Premium 需要 30-day history;
- 如果底层只保留 24h/48h,用户升级到 Standard/Premium 后无法访问更长历史;
- 当前样机/首批验证阶段优先保证产品能力闭环;
- 应用层继续通过
entitlement.quota控制用户实际可访问 1/7/30 天;
不作 per-device retention
当前阶段的统一策略:
- AWS KVS physical retention 统一 720h;
- App 层通过
assertDeviceServiceAccess+validateCloudPlaybackWindow控制访问窗口; - 先不做按设备/按订阅动态调整 stream retention;
- 成本优化后续再做 per-device 或冷存储策略。
默认值变更
lib/env.ts:kvsDataRetentionHours默认值从48改为720.env.example:KVS_DATA_RETENTION_HOURS从"48"改为"720"
注意:如果生产 VM 的
.env.production显式设置了KVS_DATA_RETENTION_HOURS=48,需要人工或 SOP 安全更新为 720。
管理工具
reconcile CLI 默认目标
reconcile CLI 的默认目标是 720h (30 days),来源于 TARGET_KVS_RETENTION_HOURS 常量。
它不依赖 NEXT_PUBLIC_APP_URL / DATABASE_URL / AUTH_SECRET 等环境变量。
单 stream 模式(无需 DB)
# 检查单个 stream,默认 720h
npm run kvs:retention:check -- --stream aovis-stream-aovis-n4k-000001
# 临时覆盖目标值,例如 168h (7 days)
npm run kvs:retention:check -- --stream aovis-stream-aovis-n4k-000001 --target-hours 168
# 实际修改
npm run kvs:retention:apply -- --stream aovis-stream-aovis-n4k-000001
全量模式(需要 DATABASE_URL)
# 检查所有有 stream 的设备
npm run kvs:retention:check -- --all-devices
# 修改所有设备
npm run kvs:retention:apply -- --all-devices
--all-devices 才会加载 Prisma 连接数据库,此时需要 DATABASE_URL 环境变量。
Options
| Option | Description |
|---|---|
--stream <name> | 单个 KVS stream |
--all-devices | 从 DB 读取所有有 stream 的设备 |
--apply | 实际修改 AWS(默认 dry-run) |
--target-hours <n> | 目标 retention 小时数(默认 720) |
重要:
- 没有
--apply时不会修改 AWS。 --target-hours必须是正整数,非法值会报错退出。- 生产环境的
KVS_DATA_RETENTION_HOURS环境变量不影响 reconcile CLI 的默认目标值。 - 生产
.env.production如果仍有KVS_DATA_RETENTION_HOURS=48,应人工更新为 720,以保证未来新建 stream 默认正确。 - 所有命令必须先 dry-run 确认,再 apply。
代码架构
lib/cloud-storage-retention.ts ← 常量 + computeKvsRetentionChange
lib/cloud-storage-plans.ts ← 套餐定义
lib/cloud-access-window.ts ← 应用层 window 验证
lib/aws/kvs-retention.ts ← describe/update AWS retention
scripts/kvs-retention-reconcile.ts ← CLI dry-run/apply 入口
当前状态
- 这仍只是云存储架构准备,不代表真实视频上传/历史列表已经完成。
- AWS KVS physical retention 需要手动或通过脚本从 48h 升级到 720h。