开发者社区> 问答> 正文

CDN的range功能分析

问题描述:  CDN的range功能分析


解决过程:

Range回源是指客户端通知源站服务器只返回部分内容,以及部分内容的范围。这对于较大文件的分发加速有很大帮助,开启Range回源功能,可以减少回源流量消耗,并且提升资源响应时间。需要源站支持range请求,即对于http请求头中包含 Range 字段,源站能够响应正确的206文件分片。

场景一:整个视频文件已缓存之后,再进行分段请求,节点还需要回源吗?
答案:不需要。

测试:先请求mp4完整文件,确保文件已完整缓存,再请求range分段文件,看是否已缓存。
不加range测试如下:




加上range测试结果如下:




场景二:Range请求,是否对文件大小有要求?
答案: 目前测试最小的文件是21字节,未发现对文件大小有限制的,需要注意的是当range请求中bytes的范围大于文件的大小时,节点返回416,content-length为0。

场景三:当文件被分段请求后,文件是分段缓存吗?
答案:是的。从图3右边可看到,文件总大小10M,在分段请求结束同时,L2直接向源站发送F包,结束本次连接。




场景四:Range: 0-1024KB已缓存,那么1-512KB是否需要回源?512KB-2014KB呢?若回源,从哪一段开始回源?
答案:1-512KB属于0-1024KB之间,因此不需要回源。512KB-2048KB这段,前一段已缓存,因此无需回源,后一段回源即可(1025-2048KB)。如下抓包:第一次请求0-1024KB,第二次请求512-2048KB,图4为两条命令,图5为第一次请求在源站抓的包,L2节点向源站请求0-1024KB;图6为第二次访问(512-2048KB),L2仅向源站请求了1025-2048数据包(分两个数据包,每个数据包512KB)。



从数据包里可以看出第一次访问到了0-1024KB并缓存了







场景四:从上面看,除了从0开始的包,其他的包每个包的单位都是512KB,那如果range的前后数字为非512的倍数,会出现什么情况?
测试命令:

curl --range 1000000-2000000 http://xdtest-largefile.pier39.cn/3o31dh438.mp4 -voa



如图7,第一个get包从1000000(start)往前推最近的512倍数开始回源下载;如图8,最后一个get包以2000000(end)往后推最近的512倍数停止回源下载。这些数据包将分块缓存在节点上,并由节点根据客户端的请求大小进行返回数据。






展开
收起
云栖徒骇 2016-04-19 11:23:36 13868 0
1 条回答
写回答
取消 提交回答
  • 学习了,谢谢分享。
    2016-04-22 11:20:04
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
构建智能化的视频系统 阿里云CDN的进化 立即下载
CDN数据化实践 立即下载
直播CDN-X - 白山直播CDN流传递链路优化 立即下载