知识卡片
来源信息要跟着产物走而不是另存数据库
内容
把每次构建的来源记录异步写入一个独立数据库、用产物哈希值去查,看似合理,实际会撞上意外的坑——很多构建会生成内容完全相同的产物(比如一个空文件),导致同一个哈希值背后堆积海量互不相关的来源记录,出错时也没法给出具体是哪条记录不满足策略;异步上传还可能静默失败导致用户不明白为何被拒绝。把来源信息直接附着在产物本身一起传播,而不是依赖独立数据库做异步关联查询,能同时解决可靠性、延迟和可调试性这三个问题。
参考来源
- 位置:《Google系统架构解密:构建安全可靠的系统》第14章《部署代码》14.6.3节确保来源信息明确(源文件:`../OREILY动物书合辑 图灵新版/_epub-src/text/part0014_split_117.html`)
- 结论依据:原文描述Google早期异步上传来源信息到数据库的方案,因空文件等产物导致数百万条来源记录绑定同一散列值,无法给出具体错误、异步上传还可能静默失败,最终建议"将文件来源与工件以内联方式传播"。
- 原始内容:以空文件情况为例:在Google,由于许多构建生成的输出会包含一个空文件,实际上有数百万条来源记录与空文件的散列值绑定……当找不到符合策略的记录时,就无法提供可操作的错误消息……我们建议将文件来源与工件以内联方式传播。