DNS 解析与CDN加速
DNS 解析就是当你从域名商那里买了域名后,由 DNS 解析商家提供以下功能:把域名指向服务器 IP 地址,同时提供免费的防护功能、防火墙等等功能。比如万网也就是现在的阿里云,本身既卖域名也提供 DNS 解析功能,还提供付费的 CDN 加速功能;DNSPOD 现在也提供卖域名和 DNS 解析功能了,与腾讯云加速整合后等于是集域名、DNS 服务和 CDN 加速三者于一身。
CDN 加速
下面说一下 CDN 加速。篇幅太长我就不上图片了。上面说过百度云加速(初期由加速乐提供技术支持,后来百度云加速自己单干了)是老魏最早用过的 CDN 加速,我用的免费套餐效果只能说一般般,打开网站经常出现“Error502 – 百度云加速节点无法连接源站”的提示,付费的不知道如何有用过的站长可以在下面留言。多年前魏艾斯博客用过几个月百度云加速,后来转投腾讯 CDN 了。
国内同样提供 CDN 加速服务的还有很多家,大家感兴趣的可以自行去问度娘,以后也会写一篇文章说说国内比较有名的 CDN 加速服务商。
CDN 加速是把你的网站分布到全国多个服务器节点,加快访客打开速度的这么一种均衡机制。同时提供抗 CC/DOS 攻击,防火墙功能等等。
从功能上来说,百度 DNS-DNSPOD-阿里云 DNS 解析都提供 DNS 解析功能;百度云加速-腾讯云 CDN-阿里云 CDN 都提供 CDN 加速功能,各家称呼叫法不同而已。
BAT 这三位大佬都很重视域名 DNS 解析和 CDN 加速这块市场了。有了大规模的站长用户就可以及时抓取到现在最新的网络热点方向,现在流行的大数据可是被 BAT 玩的很 666 的。吐槽一下貌似百度除了搜索之外啥也干不好,记得老魏不用百度云加速之后还收到过几次邮件,说又增加了 XX 功能,总之就是客官别走我们还能为你免费服务五百年的意思。不过自从找到了合适的 CDN 加速服务后老魏是没有再回去过,涉及到 CDN 加速这一块没事不会乱折腾,不知道百度云加速现在的用户体验怎么样,不敢妄加评论。
所以说如果萌新你要做站,就遵循着先买域名,再做 DNS 解析,最后做 CDN 加速这么一个步骤。BAT 这三家随便哪个都可以一站式完成这三个功能,至于如何选择可以多听听大家的意见。
CDN回源
回源原理
- 回源是指浏览器在发送请求报文时,响应该请求报文的是源站点的服务器,而不是各节点上的缓存服务器(比如nginx开启缓存),那么这个过程相对于通过各节点上的缓存服务器来响应的话就称作为回源。回源的请求或流量太多的话,有可能会让源站点的服务器承载着过大的访问压力,进而影响服务的正常访问。
- 回源域名一般是cdn领域的专业术语,通常情况下,是直接用ip进行回源的,但是如果客户源站有多个ip,并且ip地址会经常变化,对于cdn厂商来说,为了避免经常更改配置(回源ip),会采用回源域名方式进行回源,这样即使源站的ip变化了,也不影响原有的配置。
- 常规的CDN都是回源的。即:当有用户访问某一个URL的时候,如果被解析到的那个CDN节点没有缓存响应的内容,或者是缓存已经到期,就会回源站去获取。如果没有人访问,那么CDN节点不会主动去源站拿的。
- 源站内容有更新的时候,源站可以主动把内容推送到CDN节点。参考阿里云url预热https://help.aliyun.com/knowledge_detail/40106.html?spm=a2c4e.11153987.0.0.419f6ec5UvPSJ1
- CDN本来是给我们的网站加速的,但是有时会因为不合适的回源策略给服务器带来负担,只有选择正确的策略才能给自己的网站带来更高的访问效率。
CDN回源率计算方法
回源比分为回源请求数比例及回源流量比例两种:
回源请求数比
统计数据来自所有边缘节点上的请求记录,其中,对于没有缓存或缓存过期(可缓存)的请求以及不可缓存的请求,均计入回源请求中,其他直接命中缓存的,则为命中请求。
回源流量比
回源流量是回源请求文件大小产生的流量和请求本身产生的流量 回源流量比=回源流量/回源流量+用户请求访问的流量
CDN常见多级缓存
CDN概念
CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
CDN工作方法
客户端浏览器先检查是否有本地缓存是否过期,如果过期,则向CDN边缘节点发起请求,CDN边缘节点会检测用户请求数据的缓存是否过期,如果没有过期,则直接响应用户请求,此时一个完成http请求结束;如果数据已经过期,那么CDN还需要向源站发出回源请求(back to the source request),来拉取最新的数据。CDN的典型拓扑图如下:
CDN的典型拓扑图
CDN层级划分:
- CDN系统中,直接面向用户,负责给用户提供内容服务的的Cache设备都部署在整个 CDN网络的边缘位置,所以将这一层称为边缘层。
- CDN系统中,中心层负责全局的管理和控制,同时也保存了最多的内容Cache。在边缘层设备未能命中Cache时,需要向中心层设备请求;而中心层未能命中时,则需要向源站请求。不同的CDN系统设计存在差异,中心层可能具备用户服务的能力,也可能只会向下一层提供服务。
- 如果CDN系统比较庞大,边缘层向中心层请求内容太多,会造成中心层负载压力太大。此时,需要在中心层和边缘层之间部署一个区域层,负责一个区域的管理和控制,也可以提供一些内容Cache供边缘层访问。
CDN缓存
浏览器本地缓存失效后,浏览器会向CDN边缘节点发起请求。类似浏览器缓存,CDN边缘节点也存在着一套缓存机制。
CDN缓存的缺点
CDN的分流作用不仅减少了用户的访问延时,也减少的源站的负载。但其缺点也很明显:当网站更新时,如果CDN节点上数据没有及时更新,即便用户再浏览器使用Ctrl +F5的方式使浏览器端的缓存失效,也会因为CDN边缘节点没有同步最新数据而导致用户访问异常。
CDN缓存策略
- CDN边缘节点缓存策略因服务商不同而不同,但一般都会遵循http标准协议,通过http响应头中的Cache-control: max-age的字段来设置CDN边缘节点数据缓存时间。
- 当客户端向CDN节点请求数据时,CDN节点会判断缓存数据是否过期,若缓存数据并没有过期,则直接将缓存数据返回给客户端;否则,CDN节点就会向源站发出回源请求,从源站拉取最新数据,更新本地缓存,并将最新数据返回给客户端。
- CDN服务商一般会提供基于文件后缀、目录多个维度来指定CDN缓存时间,为用户提供更精细化的缓存管理。
- CDN缓存时间会对“回源率”产生直接的影响。若CDN缓存时间较短,CDN边缘节点上的数据会经常失效,导致频繁回源,增加了源站的负载,同时也增大的访问延时;若CDN缓存时间太长,会带来数据更新时间慢的问题。开发者需要增对特定的业务,来做特定的数据缓存时间管理。
CDN缓存刷新
CDN边缘节点对开发者是透明的,相比于浏览器Ctrl+F5的强制刷新来使浏览器本地缓存失效,开发者可以通过CDN服务商提供的“刷新缓存”接口来达到清理CDN边缘节点缓存的目的。这样开发者在更新数据后,可以使用“刷新缓存”功能来强制CDN节点上的数据缓存过期,保证客户端在访问时,拉取到最新的数据。