Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug Note] 关于 http2 中的大坑 #43

Open
PeterChen1997 opened this issue Apr 8, 2022 · 0 comments
Open

[Bug Note] 关于 http2 中的大坑 #43

PeterChen1997 opened this issue Apr 8, 2022 · 0 comments
Labels
bug Something isn't working

Comments

@PeterChen1997
Copy link
Owner

PeterChen1997 commented Apr 8, 2022

TLDR

http2 需要配置自动窗口大小,以解决上传大文件速度慢的问题。最好的办法是使用 http1.1 上传

背景

收到 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,这个是副作用之一

@PeterChen1997 PeterChen1997 added the bug Something isn't working label Apr 8, 2022
@PeterChen1997 PeterChen1997 changed the title [Bug Note] 关于 aws 中对于 http2 的大坑 [Bug Note] 关于 http2 中的大坑 Apr 8, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant