定制化开发事故案例——大批量文件下载原创
4人赞赏了该文章
546次浏览
编辑于2023年12月19日 14:19:39
一、关键词
大批量、文件下载、硬盘存储、PdfReader、URL
二、项目背景
某定制化项目有一需求会定期大批量下载苍穹文件服务器中的PDF文件,下载到本地硬盘服务器中。该项目的文件服务器部署在某云上。
项目上线后,客户发现系统一些重要文件被外网大量下载,且硬盘容量骤降!被迫暂停服务运行,来排查问题!排查后发现竟是内部调用?!
三、反面真实代码案例(错误示范,不要模仿!!!!!)
1、循环遍历执行文件下载的操作,且代码中取文件服务器文件地址获取的是外网URL
错误点:
(1)大批量遍历执行文件下载,不仅影响服务整体性能还给本地硬盘存储增加很大压力!
(2)苍穹文件服务器上的附件通过外网URL下载,客户误以为机密文件从外网泄露!从外网下载也有可能产生不必要的流量费用!
2、PdfReader接收到了外网URL,执行了下载的操作
四、影响范围
1、大批量执行下载操作,使客户硬盘服务器容量骤降,接近系统崩溃。被迫停止服务运行接近1天,来排查问题。
2、大量重要文件从外网被下载,有泄露风险
3、大量文件从外网被下载,还涉及到流量收费,文件服务器是部署在某云上的
五、优化思路
做大批量文件下载定制化开发,应能提前想到可能引发的问题,及时做出应对策略。包括性能、存储、流量等方面。
六、改正方案(重要!!!!!!)
1、循环遍历下载附件,可以优化为先批量打包成压缩包再执行下载。可以有效的降低资源损耗。
2、在不影响业务前提下,尽量降低文件下载请求频次和数量和优化可执行时间,批量文件下载操作对系统资源都是有损耗的,不能无限制无条件的执行。
3、下载文件服务器中的附件,不应该用外网URL,外网URL下载可能产生流量费用
错误示范
PdfReader reader= new PdfReader( String fullURL);
正确示范,path是文件的相对路径不是全路径
InputStream in=FileServiceFactory.getAttachmentFileService.getInputStream(String path); PdfReader reader= new PdfReader(in);
4、硬盘存储应采取定期垃圾文件清理机制,否则长期以往硬盘服务器还是有宕机风险。
赞 4
4人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读