文件管理系统,大文件的打包压缩加密之类的处理,寻求较优的解决方案。
文件管理系统,大文件的打包压缩加密之类的处理,寻求较优的解决方案。
系统描述
一、目前该套系统设计是课件的授权系统,是类似于腾讯漫画这种,包含授权、压缩和加密的问题。
二、课件的概念,有:课件
=》 章
=》 节
的概念。
三、每一节
里面会包含大量的视频、频和图片。每一章
里面会有 10-40节
左右。每一个课件
里面会有10章
左右。
四、因为每一节里面包含大量的视频音频和图片,可能每一节的内存大小会在200M - 500M
,或许会更大。
五、打包会以一节
为单位进行打包、压缩和加密。
六、目前打包的处理方式为:后台前端直传OSS,守护进程队列接受命令执行打包 从OSS上下载 =》 生成对应的json树和文件 =》 打包加密 =》 上传OSS
,APP端判断打包版本进行下载。
七、服务器目前配置: 2核4G 5M
目前遇到的问题
一、因为文件大小的不确定性,可能会在打包的时候出现内存泄漏。
二、打包的时间过长,时间上是不能够接受的。(打包一节
(200M左右)的时间为10分钟左右,如果打包整课件
,时间压根不敢想)
求较优的解决方案
本质就两个问题,一是内存问题,二是OSS的上传下载太耗时间。
如果不用OSS保存,用服务器直接保存得要考虑其他问题。磁盘空间、带宽大小、服务器配置、断点续传等问题(服务器配置、带宽费用也是个问题)
如果你有较好的解决方案,可以在下方留言一起讨论。
最简单方案
不知道阿里、七牛这类 OSS 服务商有没有提供类似的数据流处理服务。我印象中是有流媒体压缩,但加密就不清楚了。
新潮方案
现在有种比较新颖的方案是用 FaaS(Function as a Service)来处理 OSS 数据。大概思路是在 OSS 上传文件后会触发特定事件,由 FaaS 的函数监听这个事件,然后拿到文件、处理、保存。
这种方案有个好处是可以启动(理论上)无数个正在运行的函数,并行处理所有的上传事件;并且 FaaS 是按照函数的 CPU 事件、内存占用率按需计费的。所以无需管理服务器扩容缩容,并且相比买一台高配服务器扔在那更节省成本。
但是目前这类解决方案各家厂商的实现思路各不相同,也没有什么「事实标准」,建议在实施之前调查清楚是否符合需求再开始行动。
保守方案
关于你目前的方案以及提到的两个问题:
关于问题一,我认为只要用 Supervisor 之类的工具控制好并行的任务数量,就能够把内存占用率维持在比较稳定的水平。因为任何成熟的压缩工具,压缩文件所占用的内存大小不会随着文件大小的增长而线性增长。实际上压缩的内部流程应当是边读、边加密、边写硬盘;而不是读整个文件、加密、写硬盘。
关于问题二,如果你用的是同一家云服务商的 OSS 和云服务器,那基本可以忽略这个问题 —— 可以走内网传输。
最重要的问题
我认为最重要的问题在于,你为什么要加密?压缩我可以理解,但我不明白加密是为了什么?
在你回答之前我先提出两个假设:如果是为了防止中间人,那有 HTTPS;如果你要防客户端,那只要客户端在用户手上、解密过程在客户端上,那也没什么作用。只要价值足够大,总会被人逆出来的。不如考虑一下如何给客户端做混淆、加壳之类。