何为秒传?先看一个故事来讲讲网盘这个东西。

有一天,小明拿着1000万风投资金创办了一家公司“小明盘”,找了一群程序员,设计师,运维工程师等等等闭门做产品。一个多月以后,他们的网站正式上线了。

小红成了小明盘的第一个用户。小红注册以后,上传了一首歌(小苹果.MP3),服务器存下了。之后小明盘陆陆续续有了它的第十个,第100个用户。直到有一天,小李也上传了小苹果.MP3。工程师发现了这两个文件的身份证号码(MD5码,下同)完全相同,于是程序员们灵机一动,用户上传后文件后,计算一下文件的身份证号码。身份证号码相同的文件只存一份,所有上传了这个文件的用户在网站前端显示了这个文件的链接,这样就能减少很多服务器端的存储空间了,客户的使用体验则完全一致。

小明盘还在飞速发展中,某一天,运维工程师发现为了计算文件的身份证号码们,服务器的cpu使用率居高不下。于是大家集思广益,想出了一个秒招:于是他们新写了一个插件,用这个插件在文件上传之前计算身份证号码。插件在用户第一次打开小明盘时安装到用户的电脑。于是,身份证号码的检测被转移到了用户的电脑,插件返回给服务器一个号码,服务器端对比后就能发现是否已经存在这个文件。假若发现服务器上已经存在这个文件,前端就反应成妙传。

  在测试过程中,笔者先后使用一个475MB的视频资源和一份3.8GB的ISO镜像。测试结果显示,五款网盘的上传速度相当。对于475MB的电影《她》,五款网盘的上传速度基本维持在3—5秒之间;而3.8GB的镜像的上传速度为2分钟左右。

  如此快的上传速度似乎是几年前的数十倍,其中的奥妙在哪儿?

[attach]513224[/attach]HASH算法

  测试中的五款网盘采用的技术被称为秒传。秒传一般采用HASH算法,建立了服务端与客户端的文件对比功能,在文件上传之初,将本地文件进行HASH计算,得出文件指纹,然后将文件指纹数据上传到服务器端,将现有的指纹和服务端植物进行比对,并返回比对结果给终端。

  如果比对成功,这说明在服务器上已经有相同的文件,则直接将文件名和指纹上传到服务端,服务器端接收到文件标识,再将文件名放到该用户名下,而文件则映射自服务端原有文件,秒传成功。

  如果指纹比对不成功,那么则按常规的模式,通过HTTP的方式上传。由于网盘的出现已经很久,用户上传的文件数量也是惊人的,所以,很多常规的文件往往只需要秒传就能成功。当然,如果文件过大,在计算指纹时也会相对耗时更长,占用的资源也会相对较多。这也是为什么笔者在测试时,475MB的资源与3.8GB的资源耗时会有差距。

[attach]513225[/attach]“秒”速

  秒传技术的出现一定程度上节省了用户的时间,同时,商家也能够接受后台容量,因为虽然你的客户端上显示已经使用了3.8GB的容量,但在服务端同样的文件已经存在,所以只需要存储你的文件名等信息。

  但是,秒传技术也一直被外界所诟病,其原因就是安全性问题,1 是如果你上传了小黄片,别人之前上传过,然后你妙传了。然后别人被举报了 然后你的片没了。2 是,有极低可能,比如苹果的新 Xcode 发布了,有人通过 md5 碰撞,预先上传了包含恶意代码但是 md5 和正常 Xcode 一样的文件,然后你上传的时候是妙传,但是下载的时候包含恶意文件。