什么是CDN
CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要包括了节点调度、节点负载均衡和内容存储、分发、管理技术。
CDN有什么作用
1.减轻源站服务器压力,CDN能处理整个网站页面的70%~95%的内容访问量,从而解决了网站的并发量,由此减轻了源服务器的访问压力,也同时提升了网站的性能、可扩展性以及安全性。
2.实现加速,将网站原服务器中的内容存储到分布于各地的缓存服务(Cache Server)中(也就是CDN的节点),通过智能的中心管理系统对网络的动态流量进行分配控制,使用户能以最快的速度从最接近用户的地方获得所需的信息,一般的静态数据,如图片、多媒体资料等将基本从CDN节点上读取,这使得从源文件服务器上读取的数据量大大减少。从而提高用户访问的响应速度和服务的可用性,解决Internet网络拥塞状况,提高用户访问网站的响应速度。
3.隐藏源站服务器IP地址,使用CDN域名会解析到由我们提供的解析记录值上,既然域名没有解析到源站服务器IP上,那么源站服务器IP自然就不会暴露。
4.网站被攻击,不会影响到源站,由于域名是解析到我们提供的解析记录值上,那么被攻击,攻击的量也只会打到我们CDN节点上,所以网站被攻击源站服务器不会受到影响。
5,。CDN国内的节点(中国大陆机房的服务器)域名就一定需要有备案的,海外的节点(香港、美国等地区机房的服务器)不需要域名备案。
6解决各线路网络(电信、移动、联通等),CDN有不同线路的节点分配在全国各地可以有效的解决全国各地区线路网络的访问速度
CDN的价值
采用CDN技术,最大的好处,就是加速了网站的访问——用户与内容之间的物理距离缩短,用户的等待时间也得以缩短。
而且,分发至不同线路的缓存服务器,也让跨运营商之间的访问得以加速。
例如中国移动手机用户访问中国电信网络的内容源,可以通过在中国移动假设CDN服务器,进行加速。效果是非常明显的。
此外,CDN还有安全方面的好处。内容进行分发后,源服务器的IP被隐藏,受到攻击的概率会大幅下降。而且,当某个服务器故障时,系统会调用临近的健康服务器,进行服务,避免对用户造成影响。
正因为CDN的好处很多,所以,目前所有主流的互联网服务提供商,都采用了CDN技术。所有的云服务提供商,也都提供了CDN服务(价格也不算贵,按流量计费)。
CDN加速前
使用CDN加速前,用户侧发起的请求通过用户侧DNS递归到网站DNS解析以后,最终用户侧直接请求网站服务器。这里可能会造成以下几种情况:
1.中心服务器负载过高,因为所有客户端发起的请求都会请求到服务器上
2.终端用户内容获取延时高,比如服务器在北京,而用户在广州
3.服务稳定性差
![](https://i-blog.csdnimg.cn/blog_migrate/aa9d10e0bc7994d4e7940d418b835e4e.png)
CDN加速后
CDN通过在现有网络中增加一层新的缓存节点,将源站的资源发布到最接近用户的网络节点,使得客户端在请求时直接访问到就近的CDN节点并命中该资源,减少回源情况,提高网站访问速度。
阿里云CDN缓存节点可分为L1节点(一级节点)和L2节点(二级节点),请求的流程是:客户端–>CDN_L1–>CDN_L2–>源站。CDN的L1节点分布在全国各省市,L2节点分布在几个大区下,可以把L2节点理解为汇聚式节点,简单架构如下图所示。
CDN节点缓存策略如下:
1.客户端向CDN节点发起连接请求,当L1节点有缓存资源时,会命中该资源,直接将数据返回给客户端。当L1节点无缓存资源时,会向L2节点请求对应资源,如果L2节点有缓存资源,则将资源同步到L1节点,并返回给用户;如果L2节点无缓存资源,则直接回客户源站获取资源,并按照配置的缓存策略进行缓存。
2.为了方便理解,再举一个简单例子,假设有杭州移动节点L1-hz和宁波移动节点L1-nb两个L1节点,这两个L1节点都回源到同一个L2这个节点,源站在北京。这几个CDN节点初始的时候都没有用户的缓存资源。当ABC三个用户依次请求同一个图片的时候,过程如:
•杭州移动用户A被CDN调度到杭州移动L1-hz节点,L1-hz由于没有缓存,则回源到L2,L2由于也没有缓存,则回源到北京源站,请求到数据以后再返回给L1-hz,L1再返回给用户A。
•用户A请求完以后,L1-hz和L2节点都有了缓存资源。此时杭州移动用户B也开始访问这个图片,用户B也被分配到了L1-hz节点,由于L1-hz已经有这个图片的缓存了,因此不需要再去回源了,而是直接返回缓存给用户B。
•宁波移动用户C此时也访问了同一个图片,用户C被分配到了宁波移动节点L1-nb,由于L1-nb还没有缓存,就会回源到L2,而L2已经有缓存,因此L2会直接返回缓存数据给L1-nb,然后L1-nb再返回给用户B。此过程存在L1-nb向L2回源的过程,而L2不需要再去回源到源站了。
•通过CDN加速,杭州用户A和B可以直接从杭州节点读取缓存数据,宁波用户C可以直接从宁波节点读取数据,不需要每一次都去请求北京服务器了,提高了用户侧的访问速度,降低了服务器压力。
CDN工作原理
通过以下案例,可以进一步了解CDN的工作原理。
假设加速域名为www.a.com, 接入CDN网络,开始使用加速服务后,当终端用户(北京)发起HTTP请求时,处理流程如下图所示。
1.当终端用户(北京)向www.a.com 下的某资源发起请求时,首先向LDNS(本地DNS)发起域名解析请求。
2.LDNS检查缓存中是否有www.a.com 的IP地址记录。如果有,则直接返回给终端用户;如果没有,则向授权DNS查询。
3.当授权DNS解析www.a.com 时,返回域名CNAME www.a.tbcdn.com 对应IP地址。
4.域名解析请求发送至阿里云DNS调度系统,并为请求分配最佳节点IP地址。
5.LDNS获取DNS返回的解析IP地址。
6.用户获取解析IP地址。
7.用户向获取的IP地址发起对该资源的访问请求。
•如果该IP地址对应的节点已缓存该资源,则会将数据直接返回给用户,例如,图中步骤7和8,请求结束。
•如果该IP地址对应的节点未缓存该资源,则节点向源站发起对该资源的请求。获取资源后,结合用户自定义配置的缓存策略,将资源缓存至节点,例如,图中的北京节点,并返回给用户,请求结束。配置缓存策略的操作方法,请参见缓存配置。
特别注意
CDN调度系统分配节点的时候,是根据客户端的LocalDNS来分配节点的,而不是根据客户端IP来分配节点的。因此,如果客户端LocalDNS设置不正确的话会导致无法分配调度到最优的节点。
什么资源可以被加速
在HTTP请求的资源,请求可以分为静态请求和动态请求。
静态请求
静态请求是指在不同请求中访问到的数据都相同的静态文件。例如:图片、视频、网站中的文件(html、css、js)、软件安装包、apk文件、压缩包文件等。
CDN加速的本质是缓存加速,将您服务器上存储的静态内容缓存在阿里云CDN节点上,当您访问这些静态内容时,无需访问服务器源站,就近访问阿里云CDN节点即可获取相同内容,从而达到加速的效果,同时减轻服务器源站的压力。
动态请求
动态请求是指在不同请求中访问到的数据不相同的动态内容。例如:网站中的文件(asp、jsp、php、perl、cgi)、API接口、数据库交互请求等。
当客户端访问这些动态内容时,每次都需要访问用户的服务器,由服务器动态生成实时的数据并返回给客户端。因此CDN的缓存加速不适用于加速动态内容,CDN无法缓存实时变化的动态内容。对于动态内容请求,CDN节点只能转发回源站服务器,没有加速效果。
如果用户的网站或App应用有较多动态内容,例如需要对各种API接口进行加速,则需要使用阿里云全站加速产品。全站加速能同时加速动态和静态内容,加速方式如下:
•静态内容使用CDN加速。
•动态内容通过阿里云的路由优化、传输优化等动态加速技术以最快的速度访问您的服务器源站获取数据。从而达到全站加速的效果。
CDN的缓存策略
静态内容可以在CDN上缓存多久,这个是根据CDN的缓存策略的。如果用户没有主动到CDN上配置过期时间,则会遵循CDN的默认缓存策略。CDN的默认缓存时间比较短,最大不超过3600秒,因此很容易缓存过期。因为网站开发及其相关技术人员更清楚自身网站的业务逻辑、静态和动态因素,所以建议用户通过控制台按照文件类型和目录设置缓存时间。
用户可以登录阿里云CDN控制台配置缓存过期时间,针对静态资源配置指定目录和文件后缀名的缓存过期时间和优先级,资源过期后,自动从CDN节点删除。
全站加速和CDN
全站加速(Dynamic Route for Content Delivery Network)是阿里云融合了动态加速和静态加速技术的CDN产品。该产品一站式优化了页面动静态资源混杂、跨运营商、网络不稳定、单线源站、突发流量、网络拥塞等诸多因素导致的响应慢、丢包、服务不稳定的问题,提升全站性能和用户体验。全站加速和CDN的对比如下
全站加速的静态加速和CDN的加速原理一致,是通过将静态资源缓存到边缘节点的方式,提供用户就近访问去做加速。全站加速的动态加速是对于动态请求回源的时候,通过智能路由优化、协议优化等动态加速技术快速回源获取。