CDN基础原理与常见排错

CDN 的全称是 Content Delivery Network,即内容分发网络。CDN 是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的 负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞, 提高用户访问响应速度和命中率。CDN 的关键技术主要包括了节点调度、节点负载 均衡和内容存储、分发、管理技术。

 
各大厂商均有该产品,使用CDN业务需要域名备案
CDN基础原理与常见排错_第1张图片 CDN基础原理与常见排错_第2张图片 CDN基础原理与常见排错_第3张图片
 
正常一个情况下用户发起请求通过用户的DNF递归到网站的DNS后,解析到网站源IP,即用户直接访问源服务器获取资源,如下图(截图来源阿里CDN文档):
CDN基础原理与常见排错_第4张图片
 
这样就可能造成中心服务器负载过高,因为所有客户端发起的请求都会请求到服务器上
或者因为终端用户内容获取延时高,比如服务器在北京甚至海外,而用户在广州。
 
所以需要CDN加速来解决这类问题,CDN 通过在现有网络中增加一层新的缓存节点,将源站的资源发布到最接近用
户的网络节点,使得客户端在请求时直接访问到就近的 CDN 节点并命中该资源,减少回源情况,提高网站访问速度。

CDN基础原理与常见排错_第5张图片

如图所示,客户端向 CDN 节点发起连接请求,会通过解析直接访问就近的CDN节点(这里还会根据CDN节点的对应线路策略区分不同的运营商分流到不同的节点,“电信移动联通”),当CDN节点有缓存资源时,会命中该资源,直接将数据返回给客户端。当 CDN节点无缓存资源时,会向上一CDN节点请求对应资源,如果上一CDN节点有缓存资源,则将资源同步到当前节点,并返回给用 户;如果上一CDN节点无缓存资源,则直接回客户源站获取资源,并按照配置的 缓存策略进行缓存。

这里L2节点可理解为汇聚式节点或者核心节点,专用来缓存(回源)源站资源,不对用户端直接使用,L1节点可理解为边缘节点,直接面向用户端,当该节点没有对应的缓存时则向核心节点发起请求。

CDN专有名词解释

加速域名:需要哪个加速域名就用哪个,加速原理参考上面的解释,部分厂商(也有自建的)不支持泛域名加速,大厂如BAT是支持的,具体可咨询对应的厂商,使用泛域名加速,如*.baidu.com,则baidu.com下的所有二级域都会使用CDN加速。

源站:即网站数据源,源服务器,CDN加速需缓存资源,都会向源站获取,源站可使用IP或域名(源站域名不可与加速域名重复)。

回源:使用CDN加速后,CDN向源站请求资源并缓存到节点的过程。CDN默认是使用HTTP的80端口进行回源,如果源站有SSL配置需要443端口回源或者自定义其它端口需要在CDN的设置里配置回源端口,这里也是使用CDN后很常见的一个报错502 Bad Gateway。如果是使用80或443端口进行回源,还需要注意的一个设置是回源协议设置,百度阿里等厂商均有类似设置,默认应该是跟随,如果确定是使用80或者443则改为http或https,有一次这里我默认用的跟随,但是回源使用443,这个跟随设置没有生效,找了半天才找到原因。

CDN基础原理与常见排错_第6张图片

命中率:用户访问的时候,命中缓存的概率,如果该CDN节点上如果已经缓存了用户要请求的内容,则直接返回。(这样就算命中缓存)。CDN加速主要是静态资源的缓存到各节点,用户访问的时候直接从缓存中获取资源,而如果是动态请求,如网站中的文件(asp、jsp、php、perl、cgi)、API 接口、数据库交互请求等,或者是第一次被用户请求又没有预热过的资源,则无法命中缓存需要回源,缓存命中率的下降则相应带来的是加速效果很差。

各厂商的命中率计算可能略微有些不同,如百度的是流量命中率和请求命中率,计算方式:

流量命中率:(边缘节点流量 - 回源流量) / 边缘节点流量 * 100%。

请求命中率:(边缘节点请求数 - 回源请求数) / 边缘节点请求数 * 100%。

阿里的是缓存命中率包括字节缓存命中率和请求缓存命中率。

字节缓存命中率 = CDN 缓存命中响应的字节数 / CDN 所有请求响应的字节数
 
请求缓存命中率 = CDN 缓存命中的请求数 / CDN 所有的请求数。
 
大体都相差不大,命中率可以直接观察得出CDN加速的效果,如果命中率低,那加速效果就不理想。所以说如果是动态请求特别多的网站或者是直播业务的需求,则需要使用其它的加速产品。
 

刷新预热

刷新功能是指提交 URL刷新或目录刷新请求后,该加速域名下的所有 CDN节点里的缓存内容将会被强制过期,当用户再次向 CDN 节点请求资源时,CDN 会直接回源站获取对应的资源返回给用户,并将其缓存。简单来说刷新就是清除CDN节点缓存。

预热功能是指提交 URL预热请求后,源站将会主动将对应的资源缓存到 CDN节点,当用户首次请求时,就能直接从 CDN 节点缓存中获取到最新的请求资源,无需再回源站获取。简单来说预热就是提前在CDN节点缓存。

刷新支持url和目录刷新,预热只支持url预热,每家厂商每日的限制次数不一致,换过来理解刷新会降低缓存命中率,预热则会提高缓存命中率。

CNAME

添加加速域名后,厂商会分配一个CNAME记录,需要在加速域名解析该CNAME记录,而有些解析是有冲突的,如A记录和CNAME记录,MX记录和CNAME记录,如果需要使用CDN加速,那么直接解析该CNAME记录就可以了,原有A记录需要删除,该A记录也没有存在的必要了,因为使用CDN加速后解析都会指向CDN节点,解析生效后直接ping加速域名得到的IP就是CDN节点的IP。

关于证书配置

CDN加速默认是使用HTTP访问,如果源站有配置SSL证书,这个只和CDN的回源方式有关联,如果需要加速域名使用HTTPS,那么在CDN设置里也需要上传加速域名的证书,上传证书开启后默认是HTTP和HTTPS两种方式都可以访问,如果只需要HTTPS访问,那么可以在CDN配置里开启HTTP强制跳转HTTPS

CDN基础原理与常见排错_第7张图片

判断一个域名是否使用了CDN:

nslookup  www.baidu.com 

// 留意Addresses这行有多个地址

CDN基础原理与常见排错_第8张图片

关于缓存设置

CDN主要使用的就是静态资源缓存到多个CDN节点从而形成加速,所以缓存的设置直接影响到加速效果,一般厂商配置是发布/目录下所有文件默认30天,可自行调节,最短0秒无缓存,百度的我发过工单问了最长缓存是999天,其余的厂商不清楚,一般也用不了那么久,根据自己的资源类型需求设置就好。

防盗链设置:
白名单、黑名单以及是否允许空 refer。防盗链功能主要通过 URL 过滤的方法对来源 Host 的地址进行过滤, 其中黑名单和白名单只能有一种生效,可以将恶意 Referer 加入黑名单或将正常业务Referer 加入白名单,通过该功能可以对请求来源进行限制。
此外还有单IP限频和单请求限速功能,可以一定程序上防CC攻击。但如果是大量DDOS、CC攻击的话那只能再付费买高仿业务了...
 
 

常见报错排错思路

403:加速域名未添加到CDN(也就是cname解析问题),源站响应403,CDN鉴权问题,防盗链问题,IP黑白名单问题,UA黑白名单问题,URL违规被屏蔽。其中的鉴权、防盗链、黑白名单均属于设置问题,可检查是否自己设置有误。前两个问题可使用host本地解析或者curl命令测试,我常用的方法是先ping一下域名得到IP是否CDN节点(可在CND工具里使用IP检测),或者使用nslookup命令可以直接查询到该域名的cname解析记录(最下面的就是,如果有cname解析的话),确认正确解析后,再使用host本地解析,将加速域名解析到源站IP,然后再浏览器访问该URL,确认是否源站有问题。

404:回源host或者回源端口配置有误,再就是源站根本没有该资源也是404,。

502/503/504:主要检查源站是否正常,是否源站网络问题导致回源超时?如果使用的回源域名,该域名是否正确解析到源站?源站是否有安全组规则将CDN节点给屏蔽了?然后查看CDN设置,回源端口对应源站端口是否设置有误(80,443,自定义?比如说回源端口设置的443,但源站没有使用证书,这里也可以使用本地host解析源站的方式输入https域名验证源站是否开启SSL),回源协议是否设置正确(HTTP还是HTTPS)。

最后还有个遇见过一次的问题,视频播放类业务,使用CDN刷新URL后,播放时长只有几分钟,而源站是有1个多小时的时长,使用curl直接连接该url,得到了一个新的url,所以一开始刷新的时候取源nginx只返回了部分内容导致的,需要把里面包含的那个url也刷新一下

CDN基础原理与常见排错_第9张图片

这个问题怎么形成的原因不太清楚。

关于CDN加速与之一起使用的还有对象存储业务,这个目前还不熟

 

 

 

 

 

你可能感兴趣的:(CDN)