百度给每个人免费2TB空间,是如何做到的?

2014年4月29日22:31:11 发表评论 3,631

知乎(杜鑫)

前段时间在使用百度网盘时,突然发现百度网盘可以免费领取2TB空间啦!

网络硬盘大家可能都或多或少的接触过,不得不说在万物皆云的时代里,这是一种非常好的网络工具,而对我们这种穷到掉渣的免费用户来说,硬盘空间简直就是硬伤,刚开始使用的时候真是为了空间,各种折腾(做他那里所谓的任务),到头来也才扩充了5G左右。现在好了,随随便便、轻轻松松就有了2T的空间。

而这突如其来的2T空间是如何实现的呢?

事实是这样滴!

假如我想要为每个用户提供1G的网络存储空间。

如果服务器上有一颗1000G的硬盘可以全部为用户提供数据储存,如果每个用户分配1G的最大储存空间,那么能分配给多少个用户使用呢?

你一定说是1000/1=1000个用户。

但是事实上你这么分配了,你会发现每个用户平时根本不会上传1G的东西将容量占的满满的,有多有少,但平均用户平时只上传50M的文件,也就是说,如果你将1000G的硬盘分给1000个人使用,但只有效利用了其中的50M*1000=50G的空间,剩余950G的空间基本都完全浪费了。

那么怎么解决呢?

你可以变通一下,将这1000G的空间分配给20000个用户使用,每个人的上传上限容量还是1G,但每人平时还是平均上传50M的数据,那么20000*50M=1000G,这下子就把宝贵的服务器上的存储空间充分利用了。但你又怕这样分配给20000个人后,万一某一刻人们突然多上传点数据,那么用户不是就觉察出来你分给人家的1G空间是假的了吗?所以可以不分配那么多人,只分配给19000人,剩下一些空间做应急之用。

突然发现一下子将可分配的用户数量翻了19倍啊,了不起。那还有没有办法更加有效的利用一下呢?

如果我有1000个以上的服务器,一个服务器上有1000G空间,那么我们每个服务器上都要留下50G的空白空间以备用户突然上传大数据时导致数据塞满的情况,那么我这1000个服务器上就空出了1000台*50G=50000G的空间被浪费了,多么可惜。所以攻城狮们发明了存储集群,使得一个用户的数据可以被分配在多个服务器上存储,但在用户那看起来只是一个1G的连续空间,那么就没必要在每个服务器上预留出应急的空间了,甚至可以充分的将前一个服务器塞满后,在将数据往下一个服务器中塞。这样保证了服务器空间的最大利用,如果某一刻管理员发现用户都在疯狂上传数据(在一个大规模用户群下,这样的概率少之又少)导致我现有提供的空间不够了,没关系,只需要随手加几块硬盘或者服务器就解决了。

好吧,这下子我们的服务器空间利用高多了,可以将一定量的空间分配给最多的用户使用了。但有没有更好的改进方案呢?

管理员有一天发现,即使每个用户平均下来只存储50M的东西,但这50M也不是一蹴而就的,是随着1-2年的使用慢慢的达到这个数量的,也就是说,一个新的用户刚刚注册我的网络空间时,不会上传东西,或者只上传一点非常小的东西。那么我为每一个用户都初始分配了50M的空间,即使将来2年后他们会填满这50M,但这期间的这空间就有很多是浪费的啊。所以聪明的攻城狮说:既然我们可以分布式、集群式存储,一个用户的数据可以分布在多个服务器上,那么我们就假设一开始就给一个新注册的用户提供0M的空间,将来他用多少,我就给他提供多少存储空间,这样就彻底的保证硬盘的利用了。但用户的前端还是要显示1G的。

工程师的这个点子,使得我在建立网盘初期能用1台1000G的服务器提供了大约1000000人来注册和使用,随着注册的人多了,我也有钱了,也可以不断增加服务器以提供他们后期的存储了。同时因为一部分服务器完成了一年多购买,我的购买成本也下来了。

那么…这就结束了吗?

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: