文件上传对线上的影响-思考
前言
前几日计划构建后台项目的环境、与公司的技术顾问聊了一下 他指出了关于文件上传的问题,总的来说就是文件并发上传可能造成线上的瘫痪和崩溃,所以就去着手尝试解决此问题。
思路
先整理一下重要的点
文件上传的问题:当几个文件上传的时候一瞬间将服务器的带宽占满使得其他服务无法正常运作;文件上传速度因带宽限制超时问题;
第一点我已做了实现,造成此问题主要还是在带宽这里 举个例子一个20m的文件上传到一个5m带宽的服务器上,5m带宽的上行速率是600kbs,处理这个文件需要20*1024/600 大约需要34s,这时候其实还可,如果10个一起呢,如果不对其流的读写做控制 那么后台就会处于一个崩溃的状态,所以对于第一点主要就是对其流读写进行控制 公式为带宽上行x0.8/限定同时处理文件数
第二点的话根据大佬的指点应该在前端文件上传的地方做分片上传并集成进度条,这个实现涉及的东西就多了,关于分页上传对负载均衡的处理,以及分片上传对对象存储的集成?这个我没用实现不细谈了。
实现
第一个问题我的实现是写了一个线程池,设定其核心线程数 即并发上传文件数、最大线程数 就是最大允许多少个文件进行上传;
当来一个文件准备上传时,往线程池里塞一个线程,线程执行时 根据线程池当前运行的线程数得出流的读写速率,进行处理,当超过核心线程数时 进行等待。
实测5m带宽 10并发处理一个30m视频时,正常。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!