概述
CDN,Content Delivery Network,内容分发网络。使用户可就近取得所需内容,解决网络拥挤状况,提高用户访问网站的响应速度。CDN=更智能的镜像+缓存+流量导流。
核心功能:
- 加速静态资源加载(如图片、视频、CSS/JS);
- 动态内容加速及边缘计算;
- 负载均衡和故障切换;
- DNS优化;
- 提供HTTPS加密支持。
优势:
- 提升页面加载速度;
- 减少服务器负载;
- 提高网站可用性和稳定性;
- 地域性加速的效果;
- 安全性增强:DDoS防护、WAF(Web Application Firewall,Web应用防火墙)。
不足:
- 实时性不太好
优化方案:在网络内容发生变化时将新的网络内容从服务器端直接传送到缓存器,或当对网络内容的访问增加时将数据源服务器的网络内容尽可能实时地复制到缓存服务器。
应用场景:
- 网站(电商、企业官网)、游戏加速;
- 流媒体分发(视频、音乐);
- 移动应用的资源分发;
- API服务优化。
关于DNS,请参考一文入门DNS。
原理
目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络边缘,使用户可就近取得所需的内容,解决网络拥塞状况,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因,解决用户访问网站的响应速度慢的根本原因。
狭义地讲,CDN是一种新型的网络构建方式,它是为能在传统的IP网发布宽带丰富媒体而特别优化的网络覆盖层;广义来说,CDN代表一种基于质量与秩序的网络服务模式。
CDN是一个经过策略性部署的整体系统,包括分布式存储、负载均衡、网络请求的重定向和内容管理四个核心模块,而内容管理和全局的网络流量管理(Traffic Management)是CDN的核心所在。
通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。总的来说,内容服务基于缓存服务器,也称作代理缓存(Surrogate),它位于网络的边缘,距用户仅有"一跳"(Single Hop)之遥。同时,代理缓存是内容提供商源服务器(通常位于CDN服务提供商的数据中心)的一个透明镜像。这样的架构使得CDN服务提供商能够代表他们客户,即内容供应商,向最终用户提供尽可能好的体验,而这些用户是不能容忍请求响应时间有任何延迟的。
流程
如上图所示,用户访问未使用CDN的网站的大致过程:
- 用户向浏览器提供要访问的域名;
- 浏览器调用域名解析函数库对域名进行解析得到对应IP地址;
- 浏览器使用得到的IP地址,向服务器发出数据访问请求;
- 浏览器根据域名主机返回的数据显示网页内容。
CDN是在用户和服务器之间增加Cache层,主要是通过接管DNS实现。
不需要改动网站架构,只需修改自己的DNS解析,设置一个CNAME指向CDN服务商,如下图所示。
引入CDN后的过程:
- 用户向浏览器提供要访问的域名;
- 浏览器调用域名解析库对域名进行解析,由于CDN对域名解析过程进行调整,所以解析函数库得到的是该域名对应的CNAME记录(CNAME为CDN服务商域名),为了得到实际IP地址,浏览器需要再次对获得的CNAME域名进行解析以得到实际的IP地址;在此过程中,使用的全局负载均衡DNS解析,如根据地理位置信息解析对应的IP地址,使得用户能就近访问。(CDN服务来提供最近的机器)
- 此次解析得到CDN缓存服务器的IP地址,浏览器在得到实际的IP地址以后,向缓存服务器发出访问请求;
- 缓存服务器根据浏览器提供的要访问的域名,通过Cache内部专用DNS解析得到此域名的实际IP地址,再由缓存服务器向此实际IP地址提交访问请求;
- 缓存服务器从实际IP地址得到内容后,返回给客户端,同时在本地保存备份;
- 客户端得到由缓存服务器返回的数据后显示出来并完成整个浏览的数据请求过程。
架构
CDN网络架构主要由两大部分:
- 中心:指CDN网管中心和DNS重定向解析中心,负责全局负载均衡,设备系统安装在管理中心机房;
- 边缘节点:主要指异地节点,CDN分发的载体,主要由Cache(高速缓存服务器)和负载均衡器等组成。
当用户访问加入CDN服务的网站时,域名解析请求将最终交给全局负载均衡DNS进行处理。全局负载均衡DNS通过一组预先定义好的策略,将当时最接近用户的节点地址提供给用户,使用户能够得到快速的服务。同时,它还与分布在世界各地的所有CDN节点保持通信,搜集各节点的通信状态,确保不将用户的请求分配到不可用的CDN节点上,实际上是通过DNS做全局负载均衡。
对于普通用户来讲,每个CDN节点就相当于一个放置在它周围的Web。通过全局负载均衡DNS的控制,用户的请求被透明地指向离他最近的节点,节点中CDN服务器会像网站的原始服务器一样,响应用户的请求。
负载均衡设备负责每个节点中各个Cache的负载均衡,保证节点的工作效率;还负责收集节点与周围环境的信息,保持与全局负载DNS的通信,实现整个系统的负载均衡。
Cache负责存储客户网站的大量信息,就像一个靠近用户的网站服务器一样响应本地用户的访问请求。
CDN的管理系统是整个系统能够正常运转的保证。它不仅能对系统中的各个子系统和设备进行实时监控,对各种故障产生相应的告警,还可实时监测到系统中总的流量和各节点的流量,并保存在系统的数据库中,使网管人员能够方便地进行进一步分析。通过完善的网管系统,用户可对系统配置进行修改。
理论上,最简单的CDN网络有一个负责全局负载均衡的DNS和各节点一台Cache,即可运行。DNS支持根据用户源IP地址解析不同的IP,实现就近访问。为了保证高可用性等,需要监视各节点的流量、健康状况等。一个节点的单台Cache承载数量不够时,才需要多台Cache,多台Cache同时工作,才需要负载均衡器,使Cache群协同工作。
技术
实现CDN的主要技术手段包括:
- 高速缓存:缓存算法决定命中率、源服务器压力、POP节点存储能力;缓存内容有DNS地址缓存、客户请求内容缓存、动态内容缓存;
- 智能路由:内容分发协议,HTTP/2、QUIC;分发能力取决于IDC能力和IDC策略性分布;基于DNS的负载均衡(智能调度)决定最佳路由、响应时间、可用性、服务质量;基于地理位置的域名服务(geoDNS)是一种基于用户的地理位置将域名解析为不同IP地址的DNS服务;
- 镜像服务器:即镜像站点(Mirror Site)服务器,适用于静态和准动态的数据同步;
- 边缘节点优化:Gzip、Brotli压缩,图像优化;
- 支持协议:如静动态加速(图片加速、HTTPS带证书加速)、下载加速、流媒体加速、企业应用加速、手机应用加速。
可工作于DNS解析或HTTP重定向两种方式,通过Cache服务器,或异地的镜像站点完成内容的传送与同步更新。DNS方式用户位置判断准确率大于85%,HTTP方式准确率为99%以上;一般情况下,各Cache服务器群的用户访问流入数据量与Cache服务器到原始网站取内容的数据量之比在2:1到3:1之间,即分担50%到70%的到原始网站重复访问数据量;对于镜像,除数据同步的流量,其余均在本地完成,不访问原始服务器。
CDN回源:当用户访问某个资源时,若是被解析(及路由)到的CDN节点没有缓存需要的内容,或缓存已到期,就会回源站去获取。
回源比,分为回源请求数比例及回源流量比例两种:
- 回源请求数比:统计数据来自全部边缘节点上的请求记录,其中,对于没有缓存或缓存过时(可缓存)的请求以及不可缓存的请求,均计入回源请求中,其余直接命中缓存的,则为命中请求。
- 回源流量比:回源流量是回源请求文件大小产生的流量和请求自己产生的流量, 回源流量比 = 回源流量 回源流量 + 用户请求访问的流量 回源流量比=\frac{回源流量}{回源流量+用户请求访问的流量} 回源流量比=回源流量+用户请求访问的流量回源流量。
CDN回源的三种情况:
- CDN节点没有对应资源时主动到源站获取资源;
- 缓存失效后,CDN节点到源站获取资源;
- 在CDN管理后台或使用开放接口主动刷新触发回源。
CDN与ICP
Internet Content Provider,互联网内容提供商。
与目前现有的内容发布模式相比较,CDN强调网络在内容发布中的重要性。通过引入主动的内容管理层的和全局负载均衡,CDN从根本上区别于传统的内容发布模式。在传统的内容发布模式中,内容的发布由ICP(Internet Content Provider)的应用服务器完成,而网络只表现为一个透明的数据传输通道,这种透明性表现在网络的质量保证仅仅停留在数据包的层面,而不能根据内容对象的不同区分服务质量。此外,由于IP网的"尽力而为"的特性使得其质量保证是依靠在用户和应用服务器之间端到端地提供充分的、远大于实际所需的带宽通量来实现的。在这样的内容发布模式下,不仅大量宝贵的骨干带宽被占用,同时ICP的应用服务器的负载也变得非常重,而且不可预计。当发生一些热点事件和出现浪涌流量时,会产生局部热点效应,从而使应用服务器过载退出服务。这种基于中心的应用服务器的内容发布模式的另外一个缺陷在于个性化服务的缺失和对宽带服务价值链的扭曲,内容提供商承担他们不该干也干不好的内容发布服务。
纵观整个宽带服务的价值链,内容提供商和用户位于整个价值链的两端,中间依靠网络服务提供商将其串接起来。随着互联网工业的成熟和商业模式的变革,在这条价值链上的角色越来越多也越来越细分。比如内容/应用的运营商、托管服务提供商、骨干网络服务提供商、接入服务提供商等等。在这一条价值链上的每一个角色都要分工合作、各司其职才能为客户提供良好的服务,从而带来多赢的局面。从内容与网络的结合模式上看,内容的发布已经走过ICP的内容(应用)服务器和IDC这两个阶段。IDC的热潮也催生托管服务提供商这一角色。但是,IDC并不能解决内容的有效发布问题。内容位于网络的中心并不能解决骨干带宽的占用和建立IP网络上的流量秩序。因此将内容推到网络的边缘,为用户提供就近性的边缘服务,从而保证服务的质量和整个网络上的访问秩序就成了一种显而易见的选择。而这就是内容发布网(CDN)服务模式。CDN的建立解决困扰内容运营商的内容"集中与分散"的两难选择。无疑对于构建良好的互联网价值链是有价值的,也是不可或缺的。
CDN与DNS
CDN核心功能之一是通过DNS提供的智能路由将用户请求引导到最近的CDN边缘节点。
两者的关联:
- 域名解析:CDN依赖于DNS为其解析域名并选择适合的边缘节点;
- 智能负载均衡:
- CDN通过DNS分发流量:DNS会根据用户的地理位置、网络状态或节点负载情况,将域名解析为最优边缘节点的IP地址;
- CDN通过Anycast配合DNS:Anycast是一种单播路由技术,结合DNS,可让用户始终连接到距离最近或性能最佳的节点。
- 缓存控制:CDN使用DNS记录中的TTL控制缓存的有效期。较短的TTL可让CDN快速更新其路由和缓存配置,较长的TTL则有助于减少DNS查询频率,提高解析效率。
- CDN回源:当CDN边缘节点没有命中缓存时,需要从源站拉取内容。这种回源流量也依赖DNS将请求解析到源站的服务器地址。
两者协作的优势
- 快速切换故障节点:如果某个CDN节点宕机,DNS可快速将流量重定向到其他可用节点,保证服务的高可用性;
- 提升用户访问速度:DNS引导用户请求到最优的CDN边缘节点,大幅降低延迟;
- 支持多区域分发:结合地理位置的DNS解析,CDN实现跨区域、跨国家的内容分发,优化全球用户的访问体验。
集成时常见问题:
- TTL设置过长:若DNS的TTL时间过长,切换节点或缓存更新可能会滞后;
- DNS配置错误:若CNAME指向错误的CDN域名或IP地址,可能导致服务不可用;
- 回源依赖DNS的稳定性:若源站域名的DNS解析出现问题,CDN回源会失败。
CDN与ISP
ISP,Internet Service Provider,互联网服务提供商,如中国电信。提供互联网接入服务的企业或机构,连接用户设备到互联网;主要负责最后一公里的网络传输,如家庭宽带、移动数据网络等。
CDN与ISP的关联:
- 边缘节点部署
- CDN依赖ISP的网络基础设施:CDN服务商通常会将其边缘节点(Edge Server)部署到ISP的数据中心或直接与ISP进行合作。这种方式让内容尽可能靠近最终用户,减少跨网络的传输路径;
- 共享资源:在ISP的网络内部署CDN节点可以降低骨干网的压力,避免大量跨网流量的传输。
- 数据传输优化
- 智能路由和负载均衡
- CDN与ISP的路由协同:CDN使用智能路由算法,结合ISP的BGP路由协议(Border Gateway Protocol,边界网关协议),选择最优路径将内容送达用户。通过这种协作,CDN可减少传输延迟,提升内容分发效率;
- ISP的Peering和Transit:CDN服务商通常与ISP建立Peering(对等互联)关系,直接传输数据而不经过第三方骨干网。这种直连可降低跨网络的延迟,提高数据传输的稳定性。
- 服务质量保障(QoS,Quality of Service)
- ISP提供带宽资源:CDN需从ISP购买带宽资源,确保边缘节点能够处理大量用户请求,避免带宽瓶颈;
- CDN提升用户体验:当用户通过ISP接入网络时,CDN的内容加速能力可显著改善用户的访问速度,尤其是在网络状况较差的情况下。
CDN和ISP合作模式
- 直接合作:大型CDN提供商(如Akamai、Cloudflare)常与ISP合作,在ISP网络内部署节点,称为深度边缘部署。可降低ISP的核心网流量,提升用户体验。
- CDN带宽共享:一些ISP会直接向CDN提供带宽服务,允许其通过ISP的数据中心接入用户;
- 反向代理和透明缓存:ISP自行部署透明缓存设备,配合CDN缓存热门内容,降低访问时间。
CDN和ISP多数情况下合作愉快,但也存在一些潜在的利益冲突:
- 流量争议:ISP可能认为CDN的边缘缓存减少流量收入,尤其是在计费基于流量的情况下;
- 成本分摊问题:CDN部署在ISP内部可能增加机房、电力等运营成本,双方可能对这些费用归属产生争议;
- 网络中立性:如果ISP对某些CDN提供商施加额外收费或限速,可能违反网络中立原则。
实际案例
- Netflix和全球ISP合作
Netflix在全球范围内部署Open Connect系统,将其CDN节点直接放入ISP的网络中。通过这种方式,Netflix可将热门剧集和电影直接缓存到ISP的数据中心,降低跨网流量,提升用户观看体验。 - Cloudflare和本地ISP部署
Cloudflare的边缘节点直接与许多国家和地区的ISP合作,以提高DNS和内容分发的速度。用户访问Cloudflare加速的网站时,可通过本地ISP的节点获取资源,减少跨区域延迟。
动态内容缓存
动态内容缓存,指将频繁变化的内容暂存在缓存中,以减少对源服务器的直接请求,提升响应速度。这种缓存技术用于优化动态内容的传输,减轻源服务器负载,通常应用于内容频繁更新的场景,如新闻网站、社交平台和电子商务网站等。
缓存服务器会根据设定的缓存策略来存储和更新动态内容。例如,可通过检测URL参数、用户标识符、设备类型等特征来判断缓存内容的更新频率,按需更新缓存。一般实现原理包括以下几种方式:
- 基于请求参数的缓存:缓存会根据URL参数、HTTP头部等特定属性来判断是否需要缓存,或是否可复用缓存内容;
- 缓存失效策略:设置TTL等失效时间,动态内容在设定的时间段内保持在缓存中,过期后重新获取新的内容;
- 按需刷新:当内容变更时,系统可主动通知缓存服务器清除相关缓存,触发重新加载,确保用户获取最新数据。
CDN通过分布式的边缘服务器来加速内容传输、降低访问延迟。传统上,CDN主要用于静态内容的缓存。但随着需求的提升,现代CDN也逐渐支持动态内容缓存,CDN实现动态内容缓存的方式:
- 边缘计算和智能缓存:一些CDN服务通过边缘计算技术来分析动态内容请求,缓存符合条件的动态内容,例如定期更新的新闻页面、个性化推荐模块等。
- 动态缓存控制:CDN会基于自定义的缓存规则来判断动态内容是否可缓存。规则可包括HTTP头部信息、Cookie、请求参数等。通过设置这些条件,CDN可在一定条件下缓存动态内容。
- API缓存:很多现代应用使用API接口请求数据,CDN可缓存这些API接口的响应结果(例如,基于查询参数、用户权限等条件)以减少API服务器负载。
- 分片缓存:对于页面上部分内容是静态的、部分内容是动态的情况(如模板固定、数据变化),CDN可缓存不变的页面部分,同时动态加载变化内容。通过缓存分片(如页面的固定结构部分、公共部分),实现对动态页面的局部缓存。
CDN可实现动态内容缓存,但面临如下技术限制和挑战:
- 数据一致性:动态内容频繁更新,缓存的内容可能很快过期。需要合理设置缓存失效时间或使用主动刷新机制来确保用户获取的是最新内容;
- 个性化内容:当动态内容涉及个性化时,通常很难缓存,因为内容与每个用户的身份信息相关。针对这种场景,CDN可能需要借助边缘计算来实时生成内容,或结合用户标签进行缓存;
- 缓存策略的复杂性:动态内容缓存的策略可能较为复杂,涉及请求参数、设备类型、用户状态等多种因素,CDN配置和管理的成本相对较高。
CDN的动态内容缓存适用场景:
- API请求缓存:用于高并发的API请求中,如天气信息、汇率、实时数据等;
- 高访问量的新闻或电商页面:即便是动态内容,更新频率不高页面可在短时间内缓存;
- 局部动态页面:页面上的部分内容会动态变化,但页面模板结构不变,可缓存不变的部分,减少整体渲染的延迟。
DCDN
全站加速DCDN(Dynamic Route for Content Delivery Network),在CDN静态加速服务的基础上,进一步提供动态加速、TCP和UDP四层加速、WebSocket加速等能力;可快速地将安全、边缘计算等能力集成到全站加速的全球2800+节点,提升全站性能和用户体验,实现业务提效。
选择全站加速,可轻松实现业务提效:
- 支持HTTP、HTTPS和WebSocket七层加速,智能识别动静态资源并自适应加速策略,实现全站加速;
- 支持IP应用加速(TCP和UDP),您无需关注具体使用的协议,即能为您提供高效的传输线路;
- 基于全球2800+节点,资源可弹性扩展,实现业务高可用;
- 可将业务算力、带宽、连接数转移至全站加速的边缘节点,降低IT成本;
- 支持在边缘节点上自行编写业务程序,如A/B测试、回源URI改写、封禁拦截等;
- 提供行业通用标准API,提高易用性和适用性。
供应商
Cloudflare、Akamai、AWS CloudFront、阿里云CDN。
如何选型,考虑因素:用户分布、价格等。
接入
接入CDN方式:域名绑定、API接入。
接入步骤:
- 配置常见静态和动态资源的缓存规则;
- 调试
- 性能测试
成本与优化
CDN的计费方式:
- 按流量
- 按请求次数
如何优化CDN成本:
- 缓存命中率提升
- 资源分区管理
- 避免不必要的回源流量
未来
边缘计算
AI驱动的智能路由优化
物联网和5G网络支持