需求:云桌面场景下,需要给单位或者学校客户的数十台设备,批量升级系统镜像文件。
遇到的问题:镜像文件对应一个系统的分区,数据量非常庞大。用了以下方法:
(1) 传统方式: 1 对多模式
改变镜像后, 服务器端将这个镜像文件通过 F tp/Http 等方式,给局域网内的几十台、上百台终端进行发送, 即 1 对多的模式 。 但问题是单台服务的 带宽、磁盘读性能有限,如果是千 M 局域网,上传能力最高是 120MB/s 左右,如果有 100 个终端一起更新下载,每个终端只能获得 1.2MB/s 的下载速度,如果传输一个 256G 的分区镜像,需要几天的时间才可以传输完成 , 周期太长。
(2) 衍生方案:
基于以上问题, 先服务器传给几台 客户机器 ,等几台机器传完后再通过这些机器下发 给 另外机器的各种模式。 但这种方式需要的时间还是很长。那有没有其他更好的方案,可以更快的完成系统镜像文件的更新呢?
大文件快速分发传输文件的点量 BT/P2P 方案分享
该方案基于标准的 Bittorrent 协议进行改进优化的商业 P2P SDK 引擎,具备完善的 P2P 功能以及丰富的接口。可以实现,服务器同时给所有终端分发时,自动将文件切分为很多分块,随机给每个终端一个分块。然后每个终端拿到后,再互相连接分享 已 有的分块,实现一个分布式集群的自主分发,从而实现人越多,下载速度越快、分发效率越高。让每个终端都能获得 120MB/s 的下载速度。从而让一个本来需要几天才能传输完成的文件,可以在几十分钟就能完成传输。 关于点量 BT 的具体功能,比较多这里不做过多赘述,感兴趣的朋友可以参考 http://www.dolit.cn/category/dolit-p2p 。

目前该方案 已经广泛被多家厂商用于 大文件以及 超大文件的传输,比如影院原始拷贝分发、超大蓝光电影分发 、 系统镜像、游戏的更新、教培类文件的定时批量更新等。虽然主要功能都类似,解决的都是大文件快速分发传输的问题,但针对不同的细分行业还有所区别,比如游戏行业更重要的是对比更新功能,而影音行业会要求边下边播。
具体在系统镜像传输领域,点量 BT 除了传统 P2P 的功能外,还 针对该场景做了如下更多功能,更好的解决该场景下的实际需求 :
1、 提供自定义 IO 接口
可以将 P2P 内部所有针对文件、文件夹的 IO 操作,调用外部自定义的 IO 函数,这样就可以实现分区的读写等由外部用户自定义处理,可以针对 /dev/sda1 等分区直接当一个标准文件处理,用来制作 torrent 文件、进行文件的读写。 用户通过自定义对磁盘分区、镜像的读写函数、查看文件大小、属性等函数,将分区当做一个标准文件处理。
2 、 镜像下载优化版,可设置跳过传统校验
专门提供镜像下载优化版本,可设置跳过传统校验:磁盘镜像分区比较大,传统 BT/P2P 在进行分块校验等操作时会耗费时间太久,通过自定义 IO ,以及其他设置,可以跳过这些校验,提升制作种子、下载完成的时间。由外部校验镜像完整性。
3 、 自定义设置文件分块大小
由于磁盘分区镜像可能是 256G 甚至更大的文件,因此建议设置 4M 等超大分块大小,这些在普通 BT 软件里面是不支持的。
4 、 支持更多分块数量
镜像下载优化版本的点量 BT 可以支持 4M/8M 等超大分块大小,以及更多的分块数量支持。也可通过自定义 IO ,可以将一个超大镜像,拆分成多个虚拟文件,比如每个虚拟文件 64G ,以实现更好的并发传输效果。
5 、 支持局域网自建 Tracker , 提升 P2P 效率
针对局域网传输,可通过参数去除 UPnP 等映射,以及停止局域网自动发现。支持设置局域网自建 Tracker ,通过局域网 Tracker 的策略高效调度,以及指定节点之间的传输关系,可以减少多层路由器的多级子网下的端口映射干扰,让 P2P 连接更直接、迅速。 此外除了针对 Windows 下的 sdk ,还可提供 Linux 下的 sdk 以及对应的 tracker ,满足多场景的实际需求。