人间日常

所行皆过往,所愿皆成真

正在加载今日诗词....

文件下载原理详解和解决方案

对于文件服务器通常会面临大量文件下载请求,除了带宽、IO等硬件上的约束条件外,在极度消耗影响资源情况下,非常容易对文件服务器造成压力,导致服务器崩溃,故此需要通过一些技术手段保证服务器稳定,并且也能持有一定下载速度。

文件下载的几种优化方式

1、CDN加速,主要就是将对应文件缓存到各个CDN节点,后续就近给用户访问最优节点

如图:CDN示意图

2、S3存储,主要是强调文件存储,特点是用户海量、无限扩容、廉价,同时远程访问速度通过全球节点,速度都有保证,它综合了NAS和SAN的优点,同时具有SAN的高速直接访问和NAS的分布式数据共享等优势,提供了具有高性能、高可靠性、跨平台以及安全的数据共享的存储体系结构。

3、客户端并发多线程下载,该方式是常用方式

4、客户端分片并发下载,通常配合断点续传

5、P2P技术,传统的下载是C/S模式,即提供资源的人作为唯一的服务器,需要下载资源的人,都向这个唯一的服务器发送请求,当同时存在多个下载请求时,服务器的下载速率就会大大降低,因此P2P下载出现了。P2P下载是一种分布式存在下载速率受限的情况。

综合分析来看

对于CDN技术主要针对公共资源类文件,大家都可以统一访问,而S3主要作为一种存储服务,对文件的管理粒度无法和业务更好切合,那对于优化文件加速,常用主要是通过多线程并发下载、分片并发下载,而P2P技术似乎可以看作一个终极解决大量文件下载对服务端压力的解决方案

文件下载优化手段

主要介绍多线程并发下载、分片并发下载和P2P技术

多线程并发下载

针对需要下载多个批量文件,通过通过线程池,多个文件并行下载,此举会对服务端带宽、IO造成极大压力,会最大程度消耗硬件网络资源,并且该方式主要是针对多个文件,文件不可中断,中断后必须重新下载,而且,对于其中有大文件还会导致长时间连接的http

分片并发下载

主要通过http协议中Range 请求头来进行控制,通过它来控制下载对应的数据块,并且此方法还可以兼容普通下载,此方法同样支持普通下载,不传入Range头就可进行普通下载;也可一次只下载一段(传入一个range:bytes=0-10240);也可下载多段(传入多个range:bytes=0-10240,10241-20480);也可一次下载完文件(range范围为整个文件即可:bytes=0-102400)

同时,块之间可以并发下载,只需要在最后一块任务执行完成后,进行文件合并操作即可;并且如此客户端还可以做断点续传

P2P技术

传统的http下载是从服务器上直接复制数据给客户端,这种传输方式对于速度的限制很大,主要是带宽的限制,如果一个服务器的带宽是100,而同时有十个人在这个服务器中下载文件,那么每个人的带宽就会受到限制只有10,在早期下载器开会员可以下载的更快,就是给会员分配到了更快的带宽中了,但是不管怎么划分,资源还是有限的,像是那些超大型网站,特定时段有上亿的点击量,所以为了应付庞大的下载量p2p就应运而生了。
而运用p2p下载时,服务器与http中所担任的责任不同,这回服务器只负责将文件的基本信息放在客户端之间,而自己并没有文件,而p2p软件将一个文件拆分成多份,而客户端可以下载这若干份中的一个,就像一杯水被分成若干份,最后倒在一起还是那一杯水,另外相对于HTTP的下载方式如果服务器停机了你就下不了了,但是p2p不同如果服务器停机了你可以下载别人的这个文件,而你在下载别人的文件的同时也在将自己所下载的文件共享出去。可以说下载的用户越多下载的越快。
另外P2P传输中有“种子”这种说法。所谓的“种子”,就是指那些已经将文件下载完成的人,他们拥有全部的区块。发布资源的人自己就有一个完整的文件,所以下载时人们会先下载他的完整文件,直到更多的完整完整种子出现。当种子消失时会发生两种情况,一是缺少区块,剩下的客户端最多下载到完全相同的进度;另一种就是区块正好完整,只不过分布在不同的客户端上而已,这样下去就会有人下载完,成为种子。所以p2p可以将一个文件不断的变成种子在不同中的用户间传播。

关注我

湘ICP备2020021380号-1
© 2014 - 2024 SIWEN.PENG