-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Labels
bugSomething isn't workingSomething isn't working
Description
TLDR
http2 需要配置自动窗口大小,以解决上传大文件速度慢的问题。最好的办法是使用 http1.1 上传
- https://blog.cloudflare.com/delivering-http-2-upload-speed-improvements/
- https://stackoverflow.com/questions/44019565/http-2-file-download
背景
收到 leader 反馈,发现分别使用 web 系统内部的上传功能和使用 Postman 上传同一个文件,速度差异达到 10 倍
性能差异明显,故进行排查
分析
- 分析 web 业务逻辑
- 步骤
- 通过文件获取上传地址
- 使用 put 上传文件至 aws bucket
- 结论:没有复杂的预处理逻辑
- 步骤
- 对比 mobile 端的上传速率
- 20m 的文件,双端上传时间为 33s 和 34s,基本一致
- 对比 postman
- 20m 的文件,postman 上传时间 1 -2 s,web 上传 34s,差异较大
- 对比第三方文件上传功能,判断网络带宽是否有问题
- 使用 GitHub 上传 20m 的文件,速度为 2s,证明问题出在了我们这边
- 分析 postman 上传实现
- 通过 proxy 抓包发现上传速度和结果为真
- 分析 postman 和 系统 上传文件的 put 请求结构
- 发现存在 http 协议版本的不同
- postman 为 1.1
- 系统为 2
- 验证猜想
- google 发现 aws 存在对 http2 的传输窗口限制,可能会影响文件上传速率
- 测试关闭 http2 协议
- 上传速度恢复至 1s
思考
- 挖掘细节背后的原因,收益可能很大
- 通过微小的改动,可以提升 90%+ 的上传时间,效率提升收益明显
- 逐步收窄和定位问题,静下心来排查,有问题肯定有原因
后记
降级为 http1.1 后发现问题,当请求的页面资源过多时,会由于域名原因,阻塞请求进度,导致页面一直在 loading,这个是副作用之一
guohaoyu110
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working