# VideoFactory **Repository Path**: Mr-Nan05/video-factory ## Basic Information - **Project Name**: VideoFactory - **Description**: 视频网站 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-05-18 - **Last Updated**: 2021-05-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # README 项目名称: VideoFactory 作者:宋超群 邮箱:mr.nan0505@qq.com 仓库地址:https://gitee.com/Mr-Nan05/video-factory.git #### 功能性需求 上传视频:运行在独立的web系统中,使用http put方法上传视频,有一个参数path为文件所在的绝对路径 存储系统:在Ubuntu中使用NFS网络文件系统进行存储,上传程序通过网络进行文件传输 消息队列:使用docker运行rabbitmq镜像作为消息队列,消息体中存储视频文件信息 编码系统:基于ffmpeg,可以将视频转码为360p,480p,720p,1080p四种分辨率,并上传到NFS文件系统中 下载视频:运行在独立的web系统中,共两个接口,第一个/videos可以列出所有的视频文件及详细信息,并可以在列表的任一视频信息中点击访问第二个接口,即下载该视频 #### 非功能性需求 上传服务:使用haproxy+docker做水平扩展,可以手动进行服务扩容,可参见测试报告 下载服务:使用haproxy+docker做水平扩展,可以手动进行服务扩容,可参见测试报告 编码系统:使用rabbitmq做消息队列,每次上传一个视频文件之后将文件信息作为消息体放入消息队列,当异步程序监听到有消息时对消息进行解析,添加四个编码任务到任务队列,并且编码系统按照响应式架构中背压机制,每次只取两个任务进行编码,但是由于编码系统基于ffmpeg,不能放在容器中运行,故无法做水平扩展。 #### 测试报告 视频上传测试:只测试上传接口,模拟10个人,每人发10个请求,共100次请求 - 没有进行扩展的测试情况,平均时间389ms,有两个因为死锁被KO ![image-20210525212734952](images/image-20210525212734952.png) ![image-20210525214627320](images/image-20210525214627320.png) - 使用docker+haproxy水平扩展测试情况(开启了四个容器做扩展),平均时间71ms,大大降低 ![image-20210525214346749](images/image-20210525214346749.png) ![image-20210525214505204](images/image-20210525214505204.png) 视频下载测试:只测试下载接口,模拟10个人,每人发10个请求,共100次请求 - 没有进行扩展的测试情况,耗时35s,平均用时1097ms ![image-20210525224441697](images/image-20210525224441697.png) ![image-20210525224544405](images/image-20210525224544405.png) - 使用docker+haproxy水平扩展测试情况(开启了四个容器做扩展),平均用时84ms,耗时大大降低 ![image-20210525225102067](images/image-20210525225102067.png) ![image-20210525225205750](images/image-20210525225205750.png)