行业资讯

帮助中心 >  产品文档 >  云计算 >  关于CDN-内容分发网络
1、什么是CDN


CDN全称Content Delivery Network,即内容分发网络。内容指的是视频、图片、音乐、应用程序、网页html文件,js,css文件,配置信息或其他任意数据文件。分发网络指的是把文件发送出去的网络。传输文件和数据最简单常用的协议是HTTP,当然一切协议只要用来传输文件都可以为CDN所用,比如传输视频的RTMP协议,本文的内容涉及到底层会基于HTTP协议做介绍。


为什么需要CDN?一般以看电影为例。电影制作好后如果只有一个电影院放映,那么无论如何也接待不了全国的观众。第一个问题是一个电影院承载不了那么多消费者;第二个问题是离电影院远的消费者看电影消耗的时间太长。那么实际上我们知道,只需要把电影复制多份,发送给全国各地的电影院,消费者直接去自己附近的电影院看电影就行了。CDN就是为了解决一台服务器(为了高可用可能有多台)承载量和距离远的网民访问速度的问题而诞生的。



CDN的核心功能模块就两个:一个是负责文件缓存复制的缓存服务器,一个是负责请求调度的调度系统。


缓存服务器

就是上例中的电影院角色,分布到全国各地,为网民提供服务,简单来说就是一种带有缓存功能的代理服务器。网民的访问会被引导到这些缓存服务器上,缓存服务器代替网民向源站发出请求(第一次访问某个资源,缓存MISS),获取内容后返回给请求的网民,并保存下来,以后的网民再访问就直接返回内容了(缓存命中HIT状态)。可见,CDN主要是采用拉的方式工作的。


640wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1.jpg

CDN有两个基本的操作:刷新和预加载(也叫预热)。

刷新主要有两个作用:一是文件内容变化了要让文件更新,重新回源。另一个是有些违规的内容使其失效不可访问,前提是先要删除源站上的内容。

预热用的较少,有这么几个作用:一是源站压力大或者有大量大文件需要发布,在低谷时段比如夜间进行预热提前把文件注入CDN。二是提前把文件缓存到边缘服务器,使网民首次访问不需回源,加快响应速度。第二个作用往往被一些客户重视,也因为它有个提升性能(响应速度)的说法,被销售人员经常引用。但其实第二个作用效果有限,CDN不是永久存储,缓存的文件随时可能被逻辑删除,而且也只作用于第一次访问那个简短的时刻,所以不要夸大它的作用。


调度系统

调度系统负责把终端网民的请求调度到正确的缓存服务器,最常用的调度方式是DNS调度,把域名使用CNAME记录交给CDN运营商解析即可。可以根据网民的IP位置给出当地或附近的缓存服务器提供服务,这个DNS调度被美称为"智能DNS"。

这个调度是基于地址库的,储存了各个网段IP的具体地理位置,运营商等信息,有客户端请求解析时就根据客户端IP查地址库,就知道他在哪,用的哪个运营商。网页上也有IP查询的工具网站,也是这个原理。

DNS系统也是分级的,每级域名都有负责的服务器,最麻烦的情况下是需要递归着发多次请求才能查到。实际的DNS系统有一个称为LocalDNS的设备,客户端把请求发给它,它缓存中有就直接返回,否则会替你完成递归的过程;最终的效果是你查一次,LDNS返回给你结果,所以上边定位网民位置其实是定位LDNS的位置。LDNS一般是运营商配置给上网用户用的。

有什么问题呢:一个是有的服务器不守规范,随意的修改解析结果的过期时间,造成缓存后很难过期,造成服务器维护,故障设备的剔除变得困难。二个是网民是可以手动配置电脑或手机等设备的LDNS的,这时候就会把网民的位置定位错误。三个是造成流量的调度基于LDNS,每个LDNS后边的用户数并不相同,不能准确的调度部分流量。

为了解决传统DNS的这些问题,有些厂商制作了HTTP-DNS,也就是使用HTTP服务直接联通客户端,给客户端提供解析结果,但这个需要客户端的特殊支持,一般的浏览器是不行的。


 

2、CDN的计费方式

CDN的计费是基于流量或者带宽进行的,一般按月计费。

流量计费很简单,统计出你当月用了多少流量(一般以GByte为计量单位)乘以单价就是费用,这个数据一般从缓存服务器的访问日志里获取。


带宽计费就复杂些,带宽计量单位一般是Mbps,注意是bit不是Byte。一般是用流量数据每5分钟计算一个平均带宽值,算出一个月的数据,然后分为几种计算模式:


峰值计费:按带宽最高点计费,一般不用,客户不接受。


月95峰值计费:把整月5分钟一个的所有带宽排序,从低到高取95%的数据,然后进行峰值计费,也可以认为是排除了5%的最高值。这个计费方式可以消掉突发的毛刺部分。


日95峰计费:全称应该为"日95月均值"计费,即把每天的带宽计算95值,然后加和一个月的数据求平均值。


月95的一个问题是如果你使用了几天,之后流量切给了其他CDN厂商,那么你会被收双份的钱。所以只能月初月末调度流量。


所以日95月平均就比较好,带宽变动的周期一般是按天,哪天切换CDN厂家都很自由。


还有一些计费相关的小知识:

  1. 厂家一般按1000进制计算。

  2. 日志记录的是应用层数据,TCP/IP协议中还有建连、应答、丢包重传机制,所以实际网络上消耗的带宽会高于日志计算值,一般厂商会按统计直接乘以1.1算作计费流量或带宽。


3、关于融合CDN

融合CDN是在传统CDN基础上,融合了各主流CDN厂商的优质节点,以实现全业务处理能力的智能调度加速管理服务。融合CDN采用融合架构,更大的带宽容量储备,更精细化的链路控制,更智能的调度管理,能够满足用户多种类型内容管理和分发的要求,保障用户服务的连续性,提供稳定快速的网络访问质量。


TIM截图20200811113201.png

4、隐藏的CDN-流量劫持

有些网络运营商,要控制流量的流向,减少某些链路的压力,或者降低某些网间结算成本,等各种原因,他们会做流量劫持的动作。有一种就是通过私自搭建CDN系统,劫持流量过来的方式。劫持可能是通过篡改DNS返回的IP,或者拦截伪造HTTP响应,返回客户端302等跳转状态码,使网民的访问不出网。

这个是不是好事呢?好的方面来说,能节约带宽支出,服务了更多用户。坏的地方就是内容无法控制,性能无法控制,功能无法控制。如果有错误数据,使用CDN的刷新系统是控制不了这些隐藏的CDN的。

做业务的企业不会在乎节约那点流量费用,这种不可控更令人担心。如果有流量管理的需求还是希望网络运营商和CDN服务商用光明的方式合作解决。(其实很多这种隐藏的CDN系统也是CDN服务商背地里为网络运营商做的)


5、怎样用好CDN

上文我们提到CDN的工作原理,我们可以看到,有些地方并不在CDN的控制范围,比如网民到边缘节点的网络,比如LDNS。 

有些用户遇到单个网民的投诉,就透传给CDN排查,这根本是无意义的,有的时候为了让这个网民问题解决,可能调度系统又影响了源本正常的网民变得不正常。更有一个奇怪的特例,老板家的服务不好就让CDN解决,老板家的正常就认为正常。

对CDN的使用要从宏观上分析,是否大面积故障了,整体统计出故障率,某个性能指标有变动了等。让CDN解决某个特定用户的问题就是大炮打蚊子。

依赖CDN只能解决大部分网民的问题,要想进一步解决单个问题也是有些办法的,CDN厂商控制了CDN那端,那么客户自己能否从自己控制的client端做些事情呢,比如有些app就是资源有多个来源,有失败的会自主探测更换线路,统计出CDN边缘节点的IP,自主控制尝试多个服务器,更换不同的CDN厂家服务 。还可以配合CDN系统,做HTTP-DNS的适配。当然,这些方法只能用来解决少量特殊网民的问题,千万不要尝试完全摆脱CDN的调度。




提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: