带宽问题排查实战-记一次线上文件下载慢问题排查

原创 吴就业 135 0 2024-02-06

本文为博主原创文章,未经博主允许不得转载。

本文链接:https://www.wujiuye.com/article/9ad6002d031a4faabc4c4212ea156713

作者:吴就业
链接:https://www.wujiuye.com/article/9ad6002d031a4faabc4c4212ea156713
来源:吴就业的网络日记
本文为博主原创文章,未经博主允许不得转载。

背景

文件上传下载架构:

文件上传系统架构图

其中“文件上传系统”是我们自研的中间件,解决文件上传下载问题,支持分片上传,断点续传、缩略图、格式转换等下载能力。支持mfs、ceph、s3、oss、obs等文件系统,隐藏文件系统的差异,统一上传API。

问题

国内审核服务使用mfs文件系统,上传的文件是仅办公网络可访问。

审核那边反馈页面图片的加载很耗时,很多文件都是几十秒才下载成功,而且很容易复现,刷新一下页面就能复现。

小文件下载耗时超20秒

问题排查

首先让审核那边提供几个下载慢的图片url进行排查。

/private/5320208674382880308/b34bf91eeb3709a2d442eac04ac7eedc.png
/private/5320208674382880308/b34bf91eeb3709a2d442eac04ac7eedc.png
/private/5320193641914496052/80d068981509482c60d54b17790c756f.png
/private/5320193641914496052/80d068981509482c60d54b17790c756f.png

从上传服务的访问日记看,这些文件的下载耗时都很正常,基本在200ms以内。

但从nginx看,访问耗时很高。

从nginx查看下载耗时

其中,request_time是从接受用户请求的第一个字节到发送完响应数据的时间,upstream_response_time是指从Nginx向后端建立连接开始到接受完数据然后关闭连接为止的时间,单位是秒。从nginx看确实很耗时。

以某个文件具体分析:/private/5320193641914496052/80d068981509482c60d54b17790c756f.png

nginx侧的耗时为22.5秒。

nginx侧的耗时为22.5秒

从上传服务的访问日记,找到最接近的两个访问日记,耗时分别是92ms、109ms。

access.log.2023-06-29_10:[2023/06/29 11:50:46 CST] [INFO] (gin_middleware.glob..func1:16) [UTC=20230629T035046Z] [IP=14.152.44.25] [HOST=xxx.xxx.xx] [DEVICE_ID=] [REQ_ID=85d3f53e-233f-406f-ad81-5b4bd390f155-20230629115046] GET /private/5320193641914496052/80d068981509482c60d54b17790c756f.png 92ms 200

access.log.2023-06-29_10:[2023/06/29 11:50:23 CST] [INFO] (gin_middleware.glob..func1:16) [UTC=20230629T035023Z] [IP=14.152.44.25] [HOST=xxx.xxx.xx] [DEVICE_ID=] [REQ_ID=946522e0-d979-43a6-ad5a-65d1437a8d0a-20230629115023] GET /private/5320193641914496052/80d068981509482c60d54b17790c756f.png 109ms 200

确认代码,上传服务访问耗时是从接收到nginx的请求开始 到 将数据写入响应完成为止的时间差。

另外,将这个文件url放到浏览器频繁刷新几十次也没有复现。

从审核那边提供的浏览器复现的截图,排除连接耗时,确实是等待服务器响应内容耗时。

浏览器查看请求耗时

另外,审核那边说一个页面可能会加载上百个文件,刷新几次就是几百个文件,怀疑是带宽限制问题。让他们提供带宽指标如下。

查看带宽

经过跟运维同事确认,22.2mbps已经超过限制的带宽。

结论

办法室网络有带宽限制,一个页面加载上百张图片,很容易达到带宽限制,所以出现下载很慢。

给出优化建议:

  1. 一个页面是否真的需要100多个图片这么多?是否可以从产品功能上优化。
  2. 是否需要走外网解决?
#网络

声明:公众号、CSDN、掘金的曾用名:“Java艺术”,因此您可能看到一些早期的文章的图片有“Java艺术”的水印。

文章推荐

Easy TCP Analysis让TCP数据包分析变得跟看聊天记录一样简单

Easy TCP Analysis在线工具网站只为让TCP数据包分析变得简单,像看聊天记录一样简单!

tcpdump抓包分析实战-学习网络问题排查必备技能-抓包分析,附多个案例讲解

了解网络协议、学会利用tcpdump抓包,学会利用Wireshark分析数据包,将能帮助我们解决一些仅从客户端日记分析或仅从服务端日记分析无法解决的疑难杂症。本篇结合笔者经历的一些实战案例,带大家掌握网络问题排查必备技能:tcpdump抓包分析。

tcpdump抓包分析实战-客户端接收到网关响应的body是空的

只因请求头deviceId多了一个‘\n’导致,服务端接收到的body是空的。

从断点续传故障排查,分析浏览器是怎么实现断点续传的

自研实现文件上传下载的中间件在测试阶段发现断点续传有问题。具体表现是:使用wget下载mp4文件可以正常播放,用google浏览器打开链接,google浏览器无法正常播放mp4视频。

TLS协议以及TLS协议的握手过程

如今HTTPS已被广泛使用,但作为程序员的我们,真的理解这个'S'了吗?如果还没有,这篇入门级介绍或许能帮到你。

网络带宽和内容分发网络CDN

在参与网络项目的研发,发现自己很多网络知识都不了解,在跨部门沟通时很是被动,需要补一些网络方面的知识。本篇我们一起从一个后端开发者的视角,理解带宽、以及内容分发网络CDN。