GCS / 系统设计 · System Design / 设计追问

Street View车载图片上传:断点、鉴权与下游处理

网络中断、凭证风险和返回响应丢失时,保持图片任务可追踪。

题目重点:网络中断、凭证风险和返回响应丢失时,保持图片任务可追踪。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 训练合同:车端采集不可立即重拍,网络断续;对象存储保存原图,下游异步处理。
  • 具体单图大小、每天车辆数和区域保留策略未给;容量估算参数显式自设,避免当成既定数据。

解题路线

  1. 先创建uploadSession返回有期限的分片上传权限,绑定vehicle/session/object与大小范围。设备保存未完成清单和每片checksum;分片ACK后记本地状态,重连查询缺片。
  2. 完成请求校验总长度及校验和,并幂等把manifest状态从UPLOADING改READY。事务outbox发布imageReady,下游消费者按imageId/version去重并更新阶段。
  3. 短期权限泄漏可上传非法内容,需最小权限、过期、隔离路径及服务端最终校验;撤销设备身份不代表所有已签token立即失效,设计时明确撤销延迟。

手动走一遍

上传8片,收到前5片ACK后断网;重连发现第6片实际上已收到,只补7/8。complete响应丢失,再次complete返回同一READY结果。假设10万张/日×8MB≈800GB/日;30日原图24TB,不含副本/衍生图。带宽峰值按停车集中上传而非平均吞吐估算。

规模与取舍

分片重传成本O(缺片字节),manifest O(片数)。监控上传成功率、最老未完成年龄、下游积压及对象与元数据孤儿比例。

易错点与追问

容易失分的边界

  • 通知队列“恰一次”不能替代消费者幂等。
  • 先发下游事件再确认对象完整,会让消费者处理缺失或未封存内容。

继续深挖

  • 怎样回收长时间未完成的分片,同时避免仍在线慢上传误删?
  • 隐私处理版本重跑后,下游如何切换索引并回滚?
✓已复制微信号!