之前提到过,腾讯云和阿里云的云主机低配版本出口带宽都很低,腾讯云为1Mb/S,阿里云有高速流量,带宽也不过5Mb/S。导致页面打开缓慢,影响体验。碰巧近期公司也有业务需求,我就趁机测试了一下CDN内容分发网络的加速效果,给大家分享一下。
什么是内容分发网络?
内容分发网络(Content Delivery Network,CDN),是在现有 Internet 中增加的一层新的网络架构,由遍布全国的高性能加速节点构成。这些高性能的服务节点都会按照一定的缓存策略存储您的业务内容,当您的用户向您的某一业务内容发起请求时,请求会被调度至最接近用户的服务节点,直接由服务节点快速响应,有效降低用户访问延迟,提升可用性。
CDN 有效地解决了目前互联网业务中网络层面的以下问题:
1、用户与业务服务器地域间物理距离较远,需要进行多次网络转发,传输延时较高且不稳定;
2、用户使用运营商与业务服务器所在运营商不同,请求需要运营商之间进行互联转发;
3、业务服务器网络带宽、处理能力有限,当接收到海量用户请求时,会导致响应速度降低、可用性降低。
正常的WEB请求过程:
使用CDN加速后的WEB请求过程:
详细说明如下:
1、用户向
www.test.com
下的图片资源(1.jpg)发起请求,会先向 Local DNS 发起域名解析请求;2、当 Local DNS 解析
www.test.com
时,会发现已经配置了 CNAMEwww.test.com.cdn.dnsv1.com
,解析请求会发送至 Tencent DNS(GSLB),GSLB 为腾讯云自主研发的调度体系,会为请求分配最佳节点 IP。3、Local DNS 获取 Tencent DNS 返回的解析IP(即DNS接入节点IP地址)。
4、用户获取解析 IP;
5、用户向获取的 IP 发起对资源 1.jpg 的访问请求;
6、若该 IP 对应的节点缓存有 1.jpg,则会将数据直接返回给用户(10),此时请求结束。若该节点未缓存 1.jpg,则节点会向业务源站发起对 1.jpg 的请求(6、7、8),获取资源后,将资源缓存至节点(9),并返回给用户(10),此时请求结束。
测试场景:下载加速
腾讯云官网介绍,下载加速适用于各类文件下载的加速,如游戏安装包、手机 ROM 升级、应用程序包下载等。
腾讯云 CDN 依靠海量弹性带宽储备,具备突发性超大流量承载能力,可对这些相对较大的文件下载进行加速分发,保证下载服务的稳定性,任何区域的终端用户都可获得极速流畅的下载体验。
在腾讯云环境进行测试
为体现效果,将出口带宽为1Mb的腾讯云服务作为测试源,并上传测试用的文件。为方便操作,部署宝塔。上传速度:
测试用HTTP下载链接:
http://tl.guotiejun.com/Moba.zip
在未使用CDN加速的情况下,下载速率为125.6KB,折合1000Kb,1Mb带宽打满。
单独使用迅雷下载,峰值速率为123KB/S:
同时使用迅雷、FTP和浏览器进行下载,三者抢占带宽,总下载速度为130KB左右:
在腾讯云控制台页面,选择内容分发网络,增加域名管理配置:
提交后可以看到当前状态:
可以看到分配的CDN加速域名信息,也是实现原理中GSLB的递归查询域名,用于给客户端返回各地不通的CDN接入节点IP地址信息。
因为我用的是万网域名,所以此时需要在万网后台配置CNAME解析。
完成后查看域名管理状态:
配置完成后,在不同区域测试解析值,返回IP地址信息不同,均为各地对应的CDN节点IP地址。
在内容分发网络中点击刷新预热,增加记录值如下:
随后再进行下载测试,发现资源数量增多,并且速度有明显提升。
再更换一个域名解析,测试效果:
配置刷新预热:
首次下载发现速度和之前一样:
再次测试下载,发现10M的带宽打满。
将源指定到阿里云进行测试
前面的测试说明腾讯云对本地资源加速有效果,那么资源不在腾讯云的情况如何呢?我又在阿里云主机创建一个网站,首先创建域名解析,将cdn.guotiejun.com解析到服务器106.15.33.75。
然后在阿里云主机创建一个网站http://cdn.guotiejun.com/
上传一个209M的文件到文档目录下,使文件通过http可以下载。
测试下载链接:
http://cdn.guotiejun.com/software.zip
下载过程中,速度稳定在660KB左右,是服务器5Mb出口带宽的峰值。
下载结束后,查看平均下载速度为662KB,峰值为890KB,可能是使用了我的高速流量。
在腾讯云CDN加速中增加域名管理。
看到原域名的CNAME为cdn.guotiejun.com.cdn.dnsv1.com
此时需要修改原有的域名解析如下:
调整完成后的状态如下:
增加CDN刷新预热,增加URL刷新:
更新状态只能从操作记录中查询,这一点比较不友好。
接下来测试下载速度:
第一次同样没什么提升。但是在控制台监控,查看网速占用上行达到1100KB,都超过了出口带宽5MB。(最后确认,应该是宝塔的流量统计不准确)
Linux视图下的下载速度:
再次下载速度提升明显。
观察网卡流量监控,发现下载过程中只有短暂升高,应该是加速起了效果。
Linux中测试下载达到平均1.59MB。
查看CDN请求数据,显示加速域名命中41次。
显示测试时峰值带宽达到28.15Mb,单域名峰值带宽为6.48Mb
查看服务概览,显示消耗了0.97GB的流量,命中率达到53.63%。
而从阿里云控制台查看,高速流量的使用量统计为158.2MB,初步判断是腾讯云CDN服务起到了一定的加速效果。
观察接口流量信息,发现资源占用较少,低于实际下载速度,也能说明是CDN服务起到了加速效果。
但是当分开测试的时候,出现了有意思的现象。
左上角北京移动出口跑满,速率达到1.17MB/S;右上角为阿里云服务器,速率为69KB/S;左下角为河北联通,速率为76KB/S;右下角为北京联通,速率为520KB/S。
用北京联通重复下载,发现速度又提了上来,最高能达到出口带宽。
尔后,如果等待一两个小时之后再行下载,则又恢复到低速状态。
同腾讯云客服确认原因,答复如下:
“cdn节点没有缓存,首次访问是回源拉取数据的,建议您完整下载后再次测试。”
“您反馈您的业务是资源较大,但是每天全国的访问量只有20次左右。”
“对于您目前的业务场景,CDN因为有热度竞争机制,无法满足您的也无需求。”
我总结了一下,售后技术和售前答复确实存在出入。
1、客户在下载资源时,会优先请求本地CDN节点,如果本地CDN有资源,才会高速下载;如果本地CDN无资源,则会向源服务器进行请求,下载同时复制一份放在本地CDN节点。这点和技术实现原理相同。
就好比是河北有一个CDN节点,只有第一个用户下载之后,后面访问的用户才有加速效果。
和售前之前答复的启用刷新预热会自动同步至全国全部节点存在出入。
2、CDN还有一个热度竞争机制,如果资源访问频率较低或访问次数较少,则会被CDN节点删除,重新下载时重复过程1。
在这几天的测试过程中,如果连续请求下载,则下载速度越来越快并且越来越稳定,原来125KB的下载速度平均能达到10MB左右的效果;但是间隔超过2小时之后,速度则会恢复至原来的125KB,再次重复下载会恢复高速。
和售前之前答复的缓存后CDN节点保存资源30天存在出入。
当然,后来我也咨询了阿里云的客户,答复实现机制是一样的,我这种业务场景同样不适用。
综上,如果是业务访问量较小的情况,还是不用考虑CDN加速了;CDN主要是为了频繁访问的网站资源准备的,比如官网首页、热门视频网站等等。
对了,要用CDN的话,还要自己事先准备好域名和服务器,要对自己的网站资源流量有充足的信息,再有就是大把的钞票了!