文件管理系统,大文件的打包压缩加密之类的处理,寻求较优的解决方案。

文件管理系统,大文件的打包压缩加密之类的处理,寻求较优的解决方案。

系统描述

一、目前该套系统设计是课件的授权系统,是类似于腾讯漫画这种,包含授权、压缩和加密的问题。

二、课件的概念,有:课件 =》 =》 的概念。

三、每一节里面会包含大量的视频、频和图片。
每一章里面会有 10-40左右。
每一个课件里面会有10左右。

四、因为每一节里面包含大量的视频音频和图片,可能每一节的内存大小会在200M - 500M,或许会更大。

五、打包会以一为单位进行打包、压缩和加密。

六、目前打包的处理方式为:后台前端直传OSS,守护进程队列接受命令执行打包 从OSS上下载 =》 生成对应的json树和文件 =》 打包加密 =》 上传OSS,APP端判断打包版本进行下载。

七、服务器目前配置: 2核4G 5M

目前遇到的问题

一、因为文件大小的不确定性,可能会在打包的时候出现内存泄漏。

二、打包的时间过长,时间上是不能够接受的。(打包一(200M左右)的时间为10分钟左右,如果打包整课件,时间压根不敢想)

求较优的解决方案

本质就两个问题,一是内存问题,二是OSS的上传下载太耗时间。

如果不用OSS保存,用服务器直接保存得要考虑其他问题。磁盘空间、带宽大小、服务器配置、断点续传等问题(服务器配置、带宽费用也是个问题)

如果你有较好的解决方案,可以在下方留言一起讨论。

php
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

最简单方案

不知道阿里、七牛这类 OSS 服务商有没有提供类似的数据流处理服务。我印象中是有流媒体压缩,但加密就不清楚了。

新潮方案

现在有种比较新颖的方案是用 FaaS(Function as a Service)来处理 OSS 数据。大概思路是在 OSS 上传文件后会触发特定事件,由 FaaS 的函数监听这个事件,然后拿到文件、处理、保存。

这种方案有个好处是可以启动(理论上)无数个正在运行的函数,并行处理所有的上传事件;并且 FaaS 是按照函数的 CPU 事件、内存占用率按需计费的。所以无需管理服务器扩容缩容,并且相比买一台高配服务器扔在那更节省成本。

但是目前这类解决方案各家厂商的实现思路各不相同,也没有什么「事实标准」,建议在实施之前调查清楚是否符合需求再开始行动。

保守方案

关于你目前的方案以及提到的两个问题:

  1. 内存占用率
  2. 从 OSS 上传下载带宽

关于问题一,我认为只要用 Supervisor 之类的工具控制好并行的任务数量,就能够把内存占用率维持在比较稳定的水平。因为任何成熟的压缩工具,压缩文件所占用的内存大小不会随着文件大小的增长而线性增长。实际上压缩的内部流程应当是边读、边加密、边写硬盘;而不是读整个文件、加密、写硬盘。

关于问题二,如果你用的是同一家云服务商的 OSS 和云服务器,那基本可以忽略这个问题 —— 可以走内网传输。

最重要的问题

我认为最重要的问题在于,你为什么要加密?压缩我可以理解,但我不明白加密是为了什么?

在你回答之前我先提出两个假设:如果是为了防止中间人,那有 HTTPS;如果你要防客户端,那只要客户端在用户手上、解密过程在客户端上,那也没什么作用。只要价值足够大,总会被人逆出来的。不如考虑一下如何给客户端做混淆、加壳之类。

4年前 评论
Mr_Chung (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!