从7月中旬左右,我们客户端更新失败率由原来的2%上升到10%。更新后台数据统计显示更新失败中的90%为HTTP下载失败,具体的失败原因是文件下载完成后MD5与服务器预期的MD5不匹配。
在着手调查解决这个问题时,我第一个怀疑的点是客户端下载器。我希望能在代码里找到发生以下两种情况的可能性:一种是客户端在代码是否会导致文件下载不完整,另一种则是客户端的HTTP访问有没有明确禁用Http Cache。但客户端代码的Code Review表明每次Http请求都在Http头中明确启动了禁用Cache标志,对HTTP文件下载文件长度校验也吻合Http1.1的规范。
在第一次分析失败的基础上,我系统地整理了客户端从构建完成直至其被传送到最终用户机器上的全部流程,从完整的数据流路径中来分析问题的可能性。这个大的路径分天然地分成了两个独立的部分。
一是目标文件的部署过程:
为了避免可能存在的cache,我们客户端的每个新版本发布,都会在cdn源站上以此版本号创建创建一个全新的目录,下载地址形式如下:
HTTP://域名/版本号