文件和异步链路上,上线后才暴露的几处漏洞

梦想恒久 3 阅读 技术沉淀

问题原话:这两周上了文件上传和消息队列,功能测试全过、验收也签了,为什么上线一个月后还是接连出事?

先答:因为功能测试覆盖的是「有人操作、一次成功」的路径,而文件和异步链路的漏洞几乎全在反面——没人操作的地方、时间拉长才现形的地方。中断、重复、积压、静默,四个词能圈住绝大多数事故。逐处列出来,每处给防线:

漏洞 测试为什么测不到 防线
分片上传中断,没传完的碎片留在桶里一直计费 测试传的文件都传完了 生命周期规则中止未完成分片,超期自动清理
回调丢失,桶里有、附件表没有 测试环境回调从不失败 服务端回调之外再加一道对账,定期扫桶比对
预签名 URL 整条进访问日志,而 URL 本身就是权限 功能正常,日志没人翻 日志脱敏签名参数,有效期压短
消息重复消费 本地队列为空不重投 唯一键加状态 CAS(更新前先确认状态没变),每个消费接口必配
死信堆着没人看 测试没有持续失败的毒消息 死信告警加管理页批量处置
定时任务悄悄漏跑 测试当天手动触发都跑过 每次跑完记一条「跑到哪天成功」的水位,每天检查「昨天是否 DONE」

六处的共同点值得说破:测试环境的对照组太干净——回调不会丢、队列不重投、没人发版重启、没有时间流逝。这些条件在生产全是奢侈品。所以防线的形状也一致:要么对账(两边清单定期比对),要么心跳(最后一次成功的时间可见),要么时限(每个自动动作配一个「多久没人处理就告警」)。三样都没有的环节,就是下一场客诉的位置。


系列:本系列 对象存储:目录、权限、生命周期 | 什么时候真的需要消息队列 | 技术纵深系列索引