目录
一、项目概述
深圳某科技有限公司是某集团企业下一子公司,该集团主要有两个核心子公司,一个子公司是做TOC业务,业务内容涉及大量视频、图片等内容的上传、下载,另一子公司属于TOG业务,做移动应用安全业务,涉及大量APP应用包、SDK包等资源的上传和下载,为此,公司想设计一个云网盘系统,存储两个子公司业务涉及的文件。
网盘,又称云盘,是提供文件托管和文件上传、下载服务的网站。由于该云盘系统使用的对象是公司内部其他业务线和公司合作的客户,使用范围相对面向互联网用户的规模较小,所以这里我们又称为私云网盘。
该系统主要的技术挑战是海量数据的高并发读写访问。海量的数据该如何存储?如何避免用户的频繁读写文件,消耗太多资源,进而导致其他用户的体验不佳?
下面我们来看下私云网盘项目是如何解决这些问题的。
二、需求分析
2.1 功能需求说明
私云网盘的核心功能是提供文件上传和下载服务。基于核心功能的需求,私云网盘需要在服务器端保存这些文件,并在下载和上传过程中实现断点续传。也就是说如果上传或者下载过程中被中断了,恢复之后,还能从中断的地方重新上传或者下载,而不是从头再来。
私云网盘还需要实现文件共享的需求。使用私云网盘的不同用户之间可以共享文件,一个用户上传的文件共享给其他用户之后,其他用户也可以下载这个文件。
此外,网盘是一个存储和网络密集型的应用,用户文件占据大量磁盘资源,上传、下载需要占用大量网络带宽,并因此产生较高的运营成本。所以在设计之初就需要考虑用户体验向付费用户倾斜,需要对上传、下载等进行流速控制,保证付费用户得到更多的网络资源。
2.2 需求用例
私云网盘的用例图如下所示:
2.3 负载指标估算
2.3.1 目标用户估算
私云网盘的设计初期目标是支持500万用户的在线访问,免费用户最大可拥有1TB存储空间。预计日活用户占总用户的20%,即100万用户。我们预估活跃用户平均每天上传、下载4个文件。
2.3.2 总存储量估算
总存储量:理论上,总存储空间为500万xITB=500万TB,但是考虑到大多数用户并不会完全用掉这个空间,还有很多用户存储的文件(电影、电子书、软甲安装包、APP应用、SDK包等)其实是和别人重复的,真正需要存储的空间我们按10%估算,即50万TB。
2.3.3 QPS估算
QPS:系统需要满足的平均QPS约为4630
100万x4/(24x60x60)=4630
高峰期QPS约为平均QPS的两倍,约为9260。
2.3.4 带宽负载估算
带宽负载:每次上传/下载文件大小为30M,所以需要的网络带宽负载为226GB/s,即1808GB/s。
4630次/s x 30M/1024M=136GB/s
因为实际带宽还需要乘8,所以总带宽为136GB/sx8=1088GB/s
同样,高峰期带宽负载为271GB/s,即3624GB/s。
9260次/s x 30M/1024M=271GB/s
因为实际带宽还需要乘8,所以总带宽为271GB/sx8=216