原创 吴就业 135 0 2024-02-06
本文为博主原创文章,未经博主允许不得转载。
本文链接:https://www.wujiuye.com/article/9ad6002d031a4faabc4c4212ea156713
作者:吴就业
链接:https://www.wujiuye.com/article/9ad6002d031a4faabc4c4212ea156713
来源:吴就业的网络日记
本文为博主原创文章,未经博主允许不得转载。
文件上传下载架构:
其中“文件上传系统”是我们自研的中间件,解决文件上传下载问题,支持分片上传,断点续传、缩略图、格式转换等下载能力。支持mfs、ceph、s3、oss、obs等文件系统,隐藏文件系统的差异,统一上传API。
国内审核服务使用mfs文件系统,上传的文件是仅办公网络可访问。
审核那边反馈页面图片的加载很耗时,很多文件都是几十秒才下载成功,而且很容易复现,刷新一下页面就能复现。
首先让审核那边提供几个下载慢的图片url进行排查。
/private/5320208674382880308/b34bf91eeb3709a2d442eac04ac7eedc.png
/private/5320208674382880308/b34bf91eeb3709a2d442eac04ac7eedc.png
/private/5320193641914496052/80d068981509482c60d54b17790c756f.png
/private/5320193641914496052/80d068981509482c60d54b17790c756f.png
从上传服务的访问日记看,这些文件的下载耗时都很正常,基本在200ms以内。
但从nginx看,访问耗时很高。
其中,request_time是从接受用户请求的第一个字节到发送完响应数据的时间,upstream_response_time是指从Nginx向后端建立连接开始到接受完数据然后关闭连接为止的时间,单位是秒。从nginx看确实很耗时。
以某个文件具体分析:/private/5320193641914496052/80d068981509482c60d54b17790c756f.png
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已经超过限制的带宽。
办法室网络有带宽限制,一个页面加载上百张图片,很容易达到带宽限制,所以出现下载很慢。
给出优化建议:
声明:公众号、CSDN、掘金的曾用名:“Java艺术”,因此您可能看到一些早期的文章的图片有“Java艺术”的水印。
了解网络协议、学会利用tcpdump抓包,学会利用Wireshark分析数据包,将能帮助我们解决一些仅从客户端日记分析或仅从服务端日记分析无法解决的疑难杂症。本篇结合笔者经历的一些实战案例,带大家掌握网络问题排查必备技能:tcpdump抓包分析。
自研实现文件上传下载的中间件在测试阶段发现断点续传有问题。具体表现是:使用wget下载mp4文件可以正常播放,用google浏览器打开链接,google浏览器无法正常播放mp4视频。
在参与网络项目的研发,发现自己很多网络知识都不了解,在跨部门沟通时很是被动,需要补一些网络方面的知识。本篇我们一起从一个后端开发者的视角,理解带宽、以及内容分发网络CDN。
订阅
订阅新文章发布通知吧,不错过精彩内容!
输入邮箱,提交后我们会给您发送一封邮件,您需点击邮件中的链接完成订阅设置。