关于临时搭建的收作业系统的记录
做这个东西本身是想着收个什么作业或者收个什么文件的时候命名非常的混乱,那不如做一个收作业的系统,自动重命名就好了。
初步设想
最核心的功能:收文件并自动命名。
文件上传到服务器的时候,服务器根据一个给定的模式串,替换响应的内容,然后保存在本地,在数据库中记录其存放的路径就可以了。
服务器接受文件列表,多个的话就将他们放到一个统一的zip下。zip的名字是统一化后的名字。
存在的问题
- 文件都放到服务器本地,但是服务器的磁盘空间有限;而且如果同样的一个服务器放到多个机器上,一个挂掉了,其他的也能正常工作,这个设想还算可以,但是实际操作,就要考虑到文件是哪个收的文件就存哪,还是存完之后再向其他服务器复制一份?
- 服务器需要接受多个文件,然后统一压缩,对于服务器资源可能有些浪费。
第一次改进
解放服务器磁盘空间
现在有很多云服务厂商,包括一开始设想的部署在的服务器,也是购买的云服务器。
既然我们只是想存储文件,不如看看云服务厂商的产品,比如阿里云的OSS,比如腾讯云的COS,都是不错的产品。
因为之前给一个老板做的东西是使用的腾讯云的COS,对于其SDK比较熟悉,也就没多考虑,使用的腾讯云COS。
这样一来,即使部署多台服务器,文件都存在腾讯云上面,容灾就交给腾讯云处理吧。
减轻服务器计算量
既然可以用java打包,那么很自然,也可以使用js进行打包。
如此一来,只需要将模式串传递给前端,再有前端自动命名,随后发给服务器进行存储就可以了。
至此,服务已经可用了。
随后简单使用vue搭建了一个前端界面,部署上nginx就可以用了!
危机:页面卡住了
页面是一个周日的晚上上线的,链接也发给了同学们,当晚,有两位同学成功上传。
嗯,很可用嘛!
可是好景不长,次日零点,有一个同学来联系我说,页面卡住了,她没法上传文件了。
我赶忙打开网页:诶,明明我这里不卡啊…但是登她的账号就会卡住,很怪。
”这样吧,你先把文件QQ发我,我回头修好了,给你传上去好了。“
故障排查
随后又进行了多次尝试,在服务器上登录一个账号频繁操作,嗯,卡住了,可能是带宽打满了吧(这里其实很怪,即使是换一个浏览器,刷新会卡住,随后提示页面崩溃),随后打开的云服务器的控制台:这带宽……也没满啊…可能还有别的问题吧。
再一想,会不会是vue项目写的有问题,可是在本地使用 npm run serve 跑起来怎么也不会卡啊。
我还一度认为,是服务器的配置不够,使得容易卡住,可在出现问题当天的上午,我本机上的docker也卡住了(和服务器运行的东西相同)。
嗯,看来是docker+nginx的问题了。
临时处理
既然是nginx的问题,那我不走nginx不就好了。
把vue的路由模式从history 改成hash ,再修改vue.config.js 文件,修改成
module.exports = {
publicPath: './'
}
这不就可以了吗,那么,上线吧!
页面又卡住了!
当天上午有门考试,考完一看手机,好家伙,全是跟我反映页面卡住上传不了文件的……
这么一看,可能就是vue写差了…
为了服务能用,加班吧…
用最基础的技术,用原生的JS(包括jQuery)临时写一份新的页面吧…
耗时一个多小时,终于上线了,这次就没人反应页面卡住了。
问题暂时得到了解决,虽然vue中的问题还没有解决,但至少服务可用了,不是吗?
果然,最基础的技术才是最可靠的啊,整那么多花里胡哨的东西还是不靠谱。
第二次改进
一开始,这个收作业的系统设想中,一个作业大了也就几MB而已,秒传,页面也就没做上传速度、百分比等信息的展示。
结果服务上线的第三天:
有一个大作业需要收,要所有的文件夹,不是只有自己写的部分 ,这里面,大头是脚手架生成的东西,即使全是自己写的部分,也有好几十MB,更有甚者几百MB。
经过一个测试,这页面什么提示也没有,上传个80M的文件用了十来分钟…属实有些不友好了。而且这还是在测试环境,仅仅只是一个人上传,倘若多人同时上传…分到每个人的带宽又少了…可能一个文件,要等一个小时才能上传,这哪是2022年应有的效率。
那就,着手改进吧。
释放服务器带宽资源
既然腾讯云COS可以用java上传文件,JS理应也有相应的SDK。
这样一来,前端页面直接和COS交互,后端服务器只要签发一个临时秘钥让前端能够上传文件,上传完成之后跟服务器说一声,写入一下数据库就可以了。
参考着一些文档,这版终于上线了,同时腾讯云COS的SDK还会定期返回当前的进度,嗯,这样用户感受更直观了。
准备时间过长
新的方式上线之后,有位同学上传了一个200M的文件,平均速率达到了4MB/s,还不错。
可是他给我反应:你这文件准备时间好长啊,这个前摇,少说有十分钟了…不过上传的速度还是不错的。
准备时间,哦对,前端要给文件打个压缩包,得写一次流,这个文件大了之后确实容易慢,那就再改一下吧。
仔细一想,单个文件其实没必要弄压缩包啊,直接重命名好了。
改进之后,让那位再试了一下,准备时间这个状态基本消失了。
nice。
Beta版已经可用
至此,beta版可用了,为什么是beta版,因为当前前端页面只有上传文件的核心功能,其他的一些后端已经是实现的功能前端还没有做对接。
更何况,用vue写的那个界面还没有跑起来,不是吗?
后记
这次的上线过程可谓是一波三折。
本地测试确实可用了,却没想到在服务器却可能存在一些问题。
要时刻考虑用户的感受,后面的迭代基本都是根据用户反馈才做的。
分布式的架构和思想是比较重要的,如果这个系统现在还是需要用户把文件都上传到服务器的话,这个带宽压力还是比较大的,而且,用户的感受也不会很好,现在直连COS的话,腾讯云可以提供的理论带宽上限还是比较靠谱的,用户体验也会比较好。
要想快速上线一个产品,使用一些现有的服务是必要的,如果重复造轮子,可能现在的服务会比较不可用,而且开发压力也大。
|