您的位置:首页 > 其它

网盘容量反面的技术秘密

2016-06-28 10:56 197 查看
想要为每个用户供给 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 人来注册和运用,跟着注册的人多了,我也有钱了,也能够不断增加服务器以供给他们后期的存贮了。一同由于一部分服务器完了一年多收购,我的收购本钱也下来了。

那么…这结束了吗?

假设邮箱供给商的话,这么的运用率够高了。但网盘就不相同了。

聪明的工程师发现:不相同于邮箱,咱们的内容的附件绝大多数都是创始的和不相同的。但网盘上咱们上载的东西许多都是重复的。

比方:张三 今日下载了一部《TOKYO HOT》上载上载到了自己的网盘上,李四在三天后也下载了一模相同的《TOKYO
HOT》上载到了网络硬盘上,跟着用户的增多,你会发现总计有 1000自己 上载了 1000份 一模相同的文件到你贵重的服务器空间上,所以工程师想出一个方法,已然是相同的文件,我就只存一份不久好啦,然后在用户的前端闪现是没人都有一份不久行啦。当某些用户要删去这个文件的时分,我并不真的删去,只需求在前端闪现好像删去了,但后端一贯保存着以供其他具有此文件的用户下载。直到悉数运用此文件的用户都删去了这个文件我再真的将其删去吧。

这么子跟着存储的数据不断增加,注册的用户不断增加,其上载的重复数据不断增加。你发现这么的检查重复文件存储的功率越来越大。这么算下来好像每自己上载的不重复的文件只能均匀 1M/用户。这下子你能够供给逾越 50倍 的用户运用您这有限的空间了。

但伴随这运用,你又发现一个规则:

张三上载的《TOKYO HOT N0124》和李四上载的《TH n124》是同一个文件,只不过文件名不相同,莫非我就不能辨认出他们是一个文件,然后只将其分别给不相同的用户保存成不相同的文件名不久行啦?的确可行,但这要运用一些辨认文件相同性的算法,例如 MD5 值等。只需两个文件的 MD5 值相同,文件大小相同,我就认为它们是相同的文件,只需求保存一份文件并给不相同的用户记作不相同的文件名就好了。

有一天你发现,由于每一个文件都需求核算 MD5 值,致使 CPU 负荷很大,并且正本相同的文件非要糟蹋带宽上载回来才能够检查一致性,能改善一下吗?

聪明的工程师写了个小软件/.小插件,美其名曰“上载控件”,将核算 MD5 的作业运用这个软件交给了上载用户的点老来结束,一旦核算出用户要上载的数据和服务器上现已存储的某个数据是相同的,就爽性不用上载了,直接在用户那里标记上这个文件现已按照 XX 文件名上载成功了。这个进程几乎是刹那间搞定了,并给其起了个高富帅的名字“秒传”!

通过以上这么多过程,你发现正本你只能给 1000用户 供给网络空间的,这么多改善方法后,在用户端闪现 1G 空间不变的状况下,近乎能够为 1000000个用户 供给网络空间了。

这么假设您哪天心情好,对外宣传说:我要将每个用户的存储空间上限提升到 1TB。那么每个用户均匀仍是只上载 50M 数据,只需极个别极个其他用户上载了打破 1G 初始空间的数据,你会发现所支付的本钱近乎是微乎其微的。

勤劳的工程师还在为如何更有用率的运用服务器供给的磁盘空间在不屑极力和挖掘着……

我迷糊想到了无限容量的某虎邮箱~

至于dropbox,人家才是实在的网盘,国内的云诺好像也是这么子的。

正本我只想说一句,上载速度15KB/S咱们都感动的哭了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: