Skip to content

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

@PeterChen1997

Description

@PeterChen1997

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions