什么是阿里云CDN
阿里云内容分发网络(Content Delivery Network,简称CDN)是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络。阿里云CDN分担源站压力,避免网络拥塞,确保在不同区域、不同场景下加速网站内容的分发,提高资源访问速度。
CDN加速前
使用CDN加速前,用户侧发起的请求通过用户侧DNS递归到网站DNS解析以后,最终用户侧直接请求网站服务器。这里可能会造成以下几种情况:
- 中心服务器负载过高,因为所有客户端发起的请求都会请求到服务器上
- 终端用户内容获取延时高,比如服务器在北京,而用户在广州
- 服务稳定性差
CDN加速后
CDN通过在现有网络中增加一层新的缓存节点,将源站的资源发布到最接近用户的网络节点,使得客户端在请求时直接访问到就近的CDN节点并命中该资源,减少回源情况,提高网站访问速度。CDN缓存节点可分为L1节点(一级节点)和L2节点(二级节点),请求的流程是:客户端-->CDN_L1-->CDN_L2-->源站。CDN的L1节点分布在全国各省市,L2节点分布在几个大区下,可以把L2节点理解为汇聚式节点,简单架构如下图所示。
CDN节点缓存策略如下:
1.客户端向CDN节点发起连接请求,当L1节点有缓存资源时,会命中该资源,直接将数据返回给客户端。当L1节点无缓存资源时,会向L2节点请求对应资源,如果L2节点有缓存资源,则将资源同步到L1节点,并返回给用户;如果L2节点无缓存资源,则直接回客户源站获取资源,并按照配置的缓存策略进行缓存。
2.为了方便理解,再举一个简单例子,假设有杭州移动节点Cache1和宁波移动节点Cache2两个L1节点,这两个L1节点都回源到同一个L2这个节点,源站在北京。这几个CDN节点初始的时候都没有用户的缓存资源。当ABC三个用户依次请求同一个图片的时候,过程如下:
- 杭州移动用户A被CDN调度到杭州移动Cache1节点,Cache1由于没有缓存,则回源到L2,L2由于也没有缓存,则回源到北京源站,请求到数据以后再返回给Cache1,L1再返回给用户A。
- 用户A请求完以后,Cache1和L2节点都有了缓存资源。此时杭州移动用户B也开始访问这个图片,用户B也被分配到了Cache1节点,由于Cache1已经有这个图片的缓存了,因此Cache1不需要再去回源了,而是直接返回缓存给用户B。
- 宁波移动用户C此时也访问了同一个图片,用户C被分配到了宁波移动节点Cache2,由于Cache2还没有缓存,就会回源到L2,而L2已经有缓存,因此L2会直接返回缓存数据给Cache2,然后Cache2再返回给用户B。此过程存在Cache1向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节点删除。