Co-Authored-By: Claude Code <noreply@anthropic.com>
12 KiB
图片直播项目优化方案
版本:V1.3
日期:2026-09-17
关联文档:需求说明书 · 项目计划 · 技术实施方案
本次优化补齐现场操作、异常恢复、文件保护、统计口径和运营维护,并降低第一版部署复杂度。以下优化纳入第一版文档基线;语言范围、时间窗口、容量、设备兼容和工期仍需验证,不视为已经实现或测试通过。
1 优化范围与优先级
P0 表示必须在核心开发前明确或验证,P1 表示第一版交付前完成。优先级用于实施排序,不代表 P1 自动延期。
| 编号 | 优化内容 | 优先级 | 需求映射 | 任务映射 | 验收映射 |
|---|---|---|---|---|---|
| O01 | 连续拍摄并自动入队,清楚显示目标相册 | P1 | R17 | T20 | A15 |
| O02 | 上传开关与公开开关独立,支持批量隐藏 | P0 | R18 | T20 | A16 |
| O03 | 管理员转移相册负责人,保留历史归属 | P1 | R19 | T20 | A17 |
| O04 | 下载权限拆分与水印版本规则 | P0 | R20 | T20 T22 | A18 |
| O05 | 照片准备阶段与本地服务端记录分离 | P0 | R21 | T21 | A19 |
| O06 | 原图防覆盖及受控图片访问 | P0 | R22 | T22 | A20 |
| O07 | 明确匿名浏览统计和跨标签页去重 | P0 | R16 R23 | T19 | A14 |
| O08 | 气泡去重、后台暂停和减少动画 | P1 | R24 | T24 | A21 |
| O09 | JS 绑定展示位,后台切换相册 | P1 | R25 | T23 | A22 |
| O10 | 容量流量告警与组件节省流量 | P1 | R26 | T17 T23 | A23 |
| O11 | API 与实时入口合并部署,任务进程独立 | P0 | 实施约束 | T02 | A24 |
| O12 | 修正任务依赖并按岗位检查工期 | P0 | 管理约束 | 项目计划 | 里程碑评审 |
2 现场拍摄与照片准备
2.1 连续拍摄
工作人员先选择相册和分类,再进入连续拍摄模式。每次拍摄成功后自动创建准备任务,不要求逐张跳回列表确认。拍摄页常驻显示相册名称、分类、待上传数量和失败提示。
切换相册只影响后续照片,已入队任务的目标不可隐式修改。每张照片都有独立任务 ID;拍摄成功但写入本地失败时必须明确提示,不能显示“已加入队列”。
2.2 准备阶段
新增“准备中”和“准备失败”,涵盖系统相册文件获取、云端照片下载、本地空间、格式检查和复制。准备完成后才进入可后台传输的队列。
准备任务和上传任务分别统计,例如“准备 5 张,等待上传 20 张”。准备阶段不承诺可以无限后台执行;切后台前未准备完成的照片应保留可恢复状态,必要时提示回到 App。
本地任务包含实际文件和系统传输信息;服务端记录包含上传确认、发布结果和历史信息。换手机后可查看服务端历史,不能恢复另一台手机尚未上传的文件。新手机重新选择同一文件需明确创建新任务或进行重复提示。
3 相册控制与人员交接
相册采用独立的 uploadEnabled 和 publicEnabled 开关。关闭上传阻止新建任务和续签,已经完成核验的处理任务可继续处理;关闭公开立即停止公开 API 与实时订阅,新图片可处理就绪但不对外展示。
重新公开时,只展示符合照片可见性要求的图片,不自动恢复已隐藏或软删除的照片。活动结束时间本身不改变两个开关。
批量隐藏操作应返回逐项结果并记录操作者。观众列表、全屏图、轮播和待发送气泡均校验照片可见性;已有下载文件无法收回,缓存访问边界见第 5 节。
公司管理员可把负责人转移给有效工作人员,原上传人信息保持不变。原负责人是否保留协作者身份必须在转移操作中明确选择。停用账号不删除其历史照片,相册由管理员接管后再安排转移。
4 下载与水印
采用两个字段:downloadEnabled 和 originalDownloadEnabled。原图下载必须以允许下载为前提;关闭全部下载时隐藏下载操作并拒绝下载接口,但不能阻止截图或保存已展示的浏览图片。
允许下载且关闭原图时,提供当前配置允许的浏览版或水印版。原图始终保存,不把加水印图片覆盖到原图对象上。
水印配置带版本号。修改默认仅影响后续新照片;历史照片重生成由创建者或管理员明确发起,显示数量和进度,失败可重试。新衍生版本全部就绪前保留可用旧版本,更新单张照片引用必须原子化。旧版本清理通过独立策略执行,不在生成失败后直接删除。
5 文件不可变与访问链路
上传会话中的临时对象与已发布原图应有清楚边界。推荐先上传 staging 路径,服务端固定源版本或完成条件校验后复制到客户端无写权限的 originals 路径。后续图片处理只读取固定的原图对象。
仅随机文件名不够:同一会话的旧授权仍可能重写同一路径。上传路径应禁止覆盖,并对“对象已存在”执行完整性核验;分片完成与普通上传分别验证。不能只靠客户端自觉添加禁止覆盖参数,服务端签名或权限机制应能约束相应行为。
私有 OSS 和 CDN 回源授权、观众侧 CDN 访问鉴权是不同环节。接入 CDN 时必须确定签名、缓存键、有效期、刷新与隐藏后的失效方式。未采用 CDN 时也要处理短期 OSS 链接过期,长时间打开的大图可重新请求授权。
下线或隐藏后停止新签发链接、撤销频道并通知在线页面。对已签发 URL 和缓存定义可接受失效窗口,参数实测后确认;不能承诺未下载图片在所有缓存中瞬时消失。
6 浏览统计与互动
6.1 浏览次数
匿名观众使用同源持久浏览器标识,同一浏览器下多个标签页共享;标识创建发生并发时由服务端去重逻辑保护。同一浏览器、同一相册在建议的 30 分钟窗口内只计一次,窗口仍是待确认参数。
仅页面实际可见且相册信息加载成功后上报。翻图、语言切换、轮询、自动轮播、后台预览和资源请求不计数。超过窗口后的新页面访问可再计一次,原页面持续停留不定时增加次数。
这不是可靠的真实人数统计;不同浏览器、隐私模式或清除记录可能重新计数。浏览器禁止持久存储时降级为当前页面标识,明确降低去重精度,不影响浏览。
6.2 点赞与气泡
点击者先播放本地动画。服务端确认与广播通过源批次标识关联,当前页面忽略自己已经播放的批次;其他页面照常展示。若合并事件同时含自己和他人的点击,只抑制自己的部分。
后台标签页不积压动画,恢复后只同步最新计数。照片隐藏后,待发送和待展示的气泡都要过滤。支持关闭气泡或减少动画,不改变点赞数,也不影响其他观众。
7 网站展示位
官网接入时绑定 slotId,后台配置展示位指向哪个相册。更换活动时修改绑定即可,无需改动网站代码。组件只暴露公开配置,不携带管理权限。
展示位包括名称、启用状态、相册、默认语言、尺寸、位置和轮播参数。管理员管理全局展示位,创建者只能绑定有管理权限的相册到被授权的展示位,不能覆盖他人官网配置。
第一版用短周期轮询获取展示位配置和近期照片,周期参数经测试确定,不依赖点赞 WebSocket。切换相册时清空旧图与请求状态,避免旧响应覆盖新配置;后台返回配置版本供客户端校验。
组件页面不可见时暂停轮询与预取,恢复可见后重新校准。无图、相册下线或展示位停用时显示约定空态或收起;具体外观在原型确定。
8 部署与费用
V1.2 调整为国内管理服务与海外观众服务分别部署,海外 API 和 WebSocket 在同一服务进程内按模块组织,国内图片处理 worker 独立。保留未来独立实时进程的接口,不提前部署多个小服务。生产实例数量按可用性与压测结果配置。
费用模型至少区分原图、浏览版本、旧水印版本、请求、处理、下载流量、CDN、备份和日志。按十进制举例,1 万张 8 MB 原图约 80 GB;1 万观众每人浏览 100 张 300 KB 图片,约 300 GB 图片传输。这只是用量算例,不是价格估算,也未扣除浏览器缓存或计入原图下载。
设定项目及相册用量统计、费用或容量阈值与告警接收人。告警不自动删除照片,也不默认中断活动;是否需要限制原图下载或新增上传由管理员明确操作。
9 排期影响
V1.1 历史估算:原计划为 102 至 146 角色人日。增加 T20 至 T24 五个增量工作包,约 27 至 42 人日,修订为 129 至 188 人日。浏览统计精化并入 T19,部署简化并入 T02,费用告警并入 T17,不重复计入新增任务。
V1.1 当时采用 12 周基线;V1.2 增加国内海外同步和全球 CDN 验收后,当时为 151 至 222 人日、14 至 16 周估算,以 16 周安排为基线。岗位分配和任务依赖见项目计划,W2 技术验证后再次确认。
10 优化专项验收
- 连续拍摄时切相册不会改变已经入队照片的归属。
- 云端照片未准备完、存储不足及源文件失效都有明确状态。
- 锁屏批量上传遇到临时授权过期可恢复,无重复发布。
- 停止公开后 API、频道、轮播和气泡行为一致。
- 管理员转移负责人后旧照片上传人和审计信息保留。
- 两个下载开关组合合法,历史水印重生成失败不破坏现有浏览图。
- 旧凭证不能改变已发布原图,重试已有对象不会覆盖或误报成功。
- 同浏览器多标签访问去重,自动轮播不增加浏览次数。
- 本地气泡不会因自己的广播重复出现,减少动画不改变计数。
- 展示位换相册不用修改官网,旧请求不能恢复旧相册内容。
- 组件不可见时停止无效更新,流量与容量告警可验证。
11 仍待验证的参数
30 分钟浏览窗口、后台最长测试时长、图片格式与大小上限、上传并发、图片尺寸与质量、缓存失效窗口、轮询周期、用量阈值、目标 OS 版本及岗位实际投入。待定参数不阻止完成原型与技术试验,但必须在对应模块验收前冻结。
12 V1.2 海外访问增补
国内负责管理与上传,海外负责公开页面、查询、浏览点赞和气泡,现有国内 OSS 配合全球 CDN。图片文件不经跨境业务同步复制;国内向海外发送版本化展示元数据,海外向国内回传版本化统计快照。
新增 T25 至 T29,覆盖海外可行性、持久内容同步、统计回传、CDN 链路及故障验收。隐藏删除优先传递,定时对账补漏;权威数据按类型单点写入。V1.2 是海外架构变更记录;当前范围与估算见 V1.3 计划。
13 V1.3 账号与用户来源调整
第一期后台与 App 统一账号密码登录,飞书接入延期,不实现飞书授权或绑定。国内服务定期调用用户接口更新本地资料,支持任务记录、失败重试、手动补拉和稳定外部 ID 映射。
本地密码、权限和手动停用不受普通资料同步覆盖。新增用户激活、初始密码、同步周期和源停用字段需确认;空响应与部分分页失败不得误停用人员。T04 改为接口验证,新增 T30 同步管理,当前估算为 156 至 231 人日,16 周工作基线待接口验证后复核。