项目场景:
FTP是一种非常常用的文件传输工具。在企业中,很多大流量的数据依靠FTP传输。本BUG就是在峰值高流量FTP传输时遇到的问题。
朋友所在公司从事商务管理,有大量的会议过程视频需要归档与留存。各个大区的分公司设置有数据中心,视频存储在本地NAS中。总公司要求,所有的视文案每天下班前汇聚一份到总公司。由于整理归档是比较耗时间的过程,一般都是在下班前由当值员工批量启动一个专用FTP上传工具,把当天所有的办会记录一并自动传输。
总公司的服务器运行的全部是windows Server,永久存储区域挂载为一个盘符,通过一款很有名的轻量级FTP服务器软件提供服务。在网速升级前,总公司入口带宽是100Mbps,工作的很稳定。但近期,公司升级了入口带宽为500M,就出现了问题。带宽升级后,不少视频文件里存在马赛克,有的还比较短。发现问题后,上传工作被全部叫停,开始排查问题。
问题描述
提示:这里描述项目中遇到的问题:
数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据。
- 文件MD5改变
- 文件长度缩短(尾巴没了)
- ffmpeg 统计质量,比原始文件差,大量马赛克。
一天内,发生该现象的文件比例不高,但绝对个数也不少。
原因分析:
- 客户端日志正常,服务器日志正常。本来怀疑专用客户端有问题。改用脚本传输,问题依旧,故而问题不在客户端程序上。
- 在峰值时刻,通过旁路scp拷贝到Linux服务器,没有问题。说明网络不丢。
- 在峰值时刻,使用ftp拷贝到非常老的 IIS服务器,没有问题。说明问题就在盘阵的ftp 服务器软件上。
- 由于下班时并发拷贝有点多,通知各个子公司错峰上传,问题消失。
至此,把问题集中到FTP服务器软件上。这是因为入口带宽花钱扩容后,原本卡在入口处的TCP瓶颈没有了,流量冲击到了FTP服务器软件这里,导致丢数据。
解决方案:
通过查阅说明书,在FTP服务器高级设置里,可以设置Socket接收缓存。调节“接收套接字缓存” 为 50MB,问题解决。默认为32KB,在并行大流量冲击下,发生数据丢失。