平时下载文件,游戏安装包、系统镜像或者电影这类,点击下载按钮之后,数据不是从遥远机房一点点传过来。网站启用CDN的话,你获取的数据来自就近部署的服务器,可能就在同城,或是本省机房。这个逻辑类似网购囤水,平台不从总部仓库发货,直接从小区边上便利店配送。
CDN能加快下载,核心就是提前把文件分发到各处存储。源服务器保存完整原始文件,CDN服务商把文件副本分发到全国乃至全球大量节点。首个用户从某个节点下载完成,节点就留存这份文件。后续其他用户下载同一个文件,节点直接返回本地缓存,不再访问源站。下载人数越多,缓存热度越高,速度也更稳定,源站压力被分摊,各个节点分别服务对应片区用户。

这里有个细节需要留意。下载和网页浏览的请求模式不一样,网页单次请求返回少量数据,下载是持续传输大块内容。CDN节点处理下载任务时,会把大文件拆成很多小块,多线程从源站或者上层节点拉取分片,再拼接后发给用户。下载工具里看到的多线程下载,很多时候底层就是CDN节点做了分片,单个文件拆成数十条流并行传输。这么做可以充分占用带宽,不会因为单条连接速率不足卡住整体下载。
回源是另一个关键机制。节点没有用户请求的文件,就会去源站获取。回源链路本身也做了优化,CDN节点之间可以组网,A节点缺少文件先向B节点请求,B节点无资源再向上查询,层层递进,避免全部节点直接访问源站。热门文件访问量越高,在网络内分布越广,后续用户更容易就近获取。冷门文件首次请求,往往要走完完整回源链路,速度偏慢;一旦有人完成下载,下一次请求就会提速。
节点和用户之间的链路,也是CDN重点优化的部分。CDN服务商和各地运营商洽谈带宽资源,节点直接接入电信、联通、移动骨干网,部分节点直接部署在运营商机房缓存服务器。用户从节点下载,流量走运营商内部高速通道,避开拥堵的公共出口。新疆用户直接访问北京源站,数据包要跨多条线路、经过多个中转节点;如果CDN在乌鲁木齐或者兰州部署节点,用户就从省内或者邻近省份服务器拿数据,延迟会明显下降。
下载速度、稳定性还取决于节点带宽储备。CDN节点一般搭载万兆级别网卡,出口带宽以Gbps计量。普通网站源站出口带宽可能只有几百兆,几十人同时下载就占满带宽,后续用户只能排队等待。CDN节点服务整片区域,带宽资源池规模更大,几百人同步下载同一影片,每个人依旧可以拿到不错的速度。前提是节点缓存内存在该文件,一旦全部请求触发回源,源站依旧会被流量压垮。
分片传输搭配断点续传,是CDN下载加速常用手段。文件切割成固定大小块,单块几兆,逐块传输。某一块传输失败,仅重传该分片,不用从头下载。大文件下载场景尤其受用,网络波动中断之后,用户不需要全部重下。CDN节点支持HTTP Range请求,下载工具告知节点需要读取的字节区间,节点仅返回对应片段,两端配合完成传输。
不是所有下载场景启用CDN都能提速。文件过于冷门,节点没有缓存,首个下载用户必须等待回源,速度取决于源站到节点的线路质量。热门超大文件,节点缓存空间耗尽,旧文件被清理淘汰,下一个用户访问依旧触发回源。还有一种情况,节点到用户本地的网络本身故障,比如家庭宽带出口拥堵,就算CDN性能再好,也解决不了最后一公里的问题。CDN优化的是服务器到用户的传输链路,用户本地网络质量不在它处理范围内。
普通用户不用做任何配置,网站接入CDN之后,下载请求自动走加速通道。部分下载工具会展示连接服务器IP,IP所在地和你本地不一致,就代表CDN已经生效。如果你运营网站,想要给访客提供下载加速,把文件放到源站,在CDN控制台配置缓存策略,将下载目录或者对应文件后缀加入缓存列表,让节点可以保存文件重复使用。缓存时长设置长一些,热门文件不容易被清理。
CDN下载加速本质就是以存储空间换取访问速度。提前复制文件部署在靠近用户的节点,请求时直接读取,不用远距离拉取。节点数量越多、缓存热度越高、线路质量越好,下载就越快越稳。你感受到的快速下载,背后是大量服务器提前分发存储文件。