內容分发网络(Content Delivery Network 或 Content Distribution Network,简称 CDN) 通过将源站内容分发至 最接近用户 的节点,从而 降低核心系统负载(系统、网络),使用户可就近取得所需内容,提高用户访问的响应速度。这种技术方案解决了因分布、带宽、服务器性能带来的访问延迟问题,适用于图片小文件、大文件下载、音视频点播、全站加速和安全加速等场景。
通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN 系统能够实时地根据 网络流量 和 各节点的连接、负载状况 以及 到用户的距离 和 响应时间 等综合信息将用户的请求重新导向离用户最近的服务节点上。
利用公式简述 CDN 可表示为:
CDN = 更智能的镜像 + 缓存 + 流量导流;
简单地说,CDN 是一个经策略性部署的整体系统,包括分布式存储、负载均衡、网络请求的重定向 和 内容管理 4 个要件,而内容管理和全局的网络流量管理(Traffic Management)是 CDN 的核心所在。
用户终端访问 CDN 的过程分为两个步骤,一是用户通过 DNS 找到最近的 CDN 边缘节点 IP,二是数据在网络中送达用户终端。
最简单的 CDN 网络由一个 DNS 服务器和几台缓存服务器组成,假设您的加速域名为 www.taobao.com
,接入 CDN 网络,开始使用加速服务后,当终端用户(广州)发起 HTTP 请求时,处理流程如下:
www.taobao.com
下的某资源发起请求时,首先向 LDNS(本地 DNS)发起域名解析请求。www.taobao.com
的 IP 地址记录。如果有,则直接返回给终端用户;如果没有,则向授权 DNS 查询。www.taobao.com
时,返回域名 CNAME www.taobao.alicdn.com
对应 IP 地址。Local DNS 通常是你的运营商提供的 DNS,一般域名解析的第一站会到这里 回源 HOST 是指 CDN 节点在回源过程中,在源站访问的站点域名。
在步骤四中,DNS 调度系统可以实现负载均衡功能,负载均衡分为全局负载均衡和区域负载均衡,其内部逻辑大致如下:
典型的 CDN 系统由下面三个部分组成:
CDN 通常由源站负责内容生产,主干节点负责二级缓存和加速,通常在 BGP 网络。
广义上的内容分发网络可以包含源站一起,甚至多媒体分发(视频)。商业意义上的 CDN 只包含 CDN 提供商的网络,不包含源站。部分 CDN 支持图片及多媒体处理扩展等附加功能:压缩、剪切、水印、鉴黄。
CDN 切面
CDN 数据流向
站点或者应用中大量静态资源的加速分发,建议将站点内容进行动静分离,动态文件可以结合云服务器 ECS,静态资源如各类型 HTML、CSS、JS、图片、文件、短视频等,建议结合对象存储 OSS 存储海量静态资源,可以有效加速内容加载速度,轻松搞定网站图片、短视频等内容分发。
建议将 CDN 产品与 OSS 产品结合使用,可以加速资源的加载速度,提高网站图片、短视频等分发效率。
业务价值:
大文件下载优化加速分发:网站或应用 App 的主要业务为大文件下载,例如:安装包文件 apk
、音频文件 mp3
、驱动程序 exe
、应用更新文件 zip
等,平均单个文件大小在 20M 以上,如游戏、各类客户端下载和 App 下载商店等。
业务价值:
音视频点播优化加速服务:网站或应用 App 的主要业务为视频点播或短视频类。支持例如:mp4
、flv
、rmvb
、wmv
、HLS
等主流视频格式。
视音频点播主要适用于各类视音频站点,如影视类视频网站、在线教育类视频网站、新闻类视频站点、短视频社交类网站以及音频类相关站点和应用。
CDN 支持流媒体协议,例如 RTMP 协议。在很多情况下,这相当于一个代理,从上一级缓存读取内容,转发给用户。由于流媒体往往是连续的,因而可以进行预先缓存的策略,也可以预先推送到用户的客户端。
对于静态页面来讲,内容的分发往往采取 拉取 的方式,也即当发现未命中的时候,再去上一级进行拉取。但是,流媒体数据量大,如果出现回源,压力会比较大,所以往往采取主动推送的模式,将热点数据主动推送到边缘节点。
对于流媒体来讲,很多 CDN 还提供 预处理 服务,也即文件在分发之前,经过一定的处理。例如将视频转换为不同的码流,以适应不同的网络带宽的用户需求;再如对视频进行分片,降低存储压力,也使得客户端可以选择使用不同的码率加载不同的分片。这就是我们常见的,超清、标清、流畅等。
业务价值:
视频流媒体直播服务,支持媒资存储、切片转码、访问鉴权、内容分发加速一体化解决方案。结合弹性伸缩服务,及时调整服务器带宽,应对突发访问流量;结合媒体转码服务,享受高速稳定的并行转码,且任务规模无缝扩展。
传统的 CDN 服务是纯粹的缓存和分发服务,缺乏可以直接提供给您的计算能力。访问 CDN 的海量请求中,复杂的计算逻辑必须回服务器源站执行,这增加了您的服务器消耗以及架构的复杂性。ER 可提供直接在 CDN 边缘节点计算处理的能力,将极大提高 CDN 的可定制化,可编程化,从而大量减少需回源的请求,降低用户的请求延时。同时 CDN 边缘节点拥有天然的高可用、高伸缩、全球负载均衡的特性,边缘的计算服务可应用于更多的使用场景。
通常,使用了 CDN 后,您可以根据延时、下载速度、打开速度、丢包率、回源率和缓存命中率判断加速效果。
使用 CDN 加速,能够帮助您分担源站压力,加速资源访问速度。除了通用的数据观测指标外,不同的场景下也有更具体的指标。观测这些指标,不仅可以帮助您体验 CDN 加速的效果,也能观测自身业务使用 CDN 的情况,帮助您更好地做出调整和决策。
您可以根据以下几个主要性能指标,观察使用 CDN 前后,您的网站情况。这些指标包含但不限于:
回源流量比=回源流量/(回源流量+用户请求访问的流量)
,比值越低,性能越好。说明:上文提到的回源率、缓存命中率都是指使用 CDN 后衡量的指标。如果您还没有使用 CDN,那么回源请求数为 100%,缓存命中率为 0。
一般情况下,使用 CDN 后,您的网络延时、丢包率和回源率都会降低,与之相对的下载速度、打开速度、缓存命中率则会提高。但是,由于业务场景和业务类型的不同,即使选择了相同配置的 CDN 服务,实际产生的加速效果也不相同。因此,这里只是提供了定性的指标以供观测。
CDN 的各类应用场景都各自具有一些具体指标。您可以根据您的业务场景,进一步观测。
小文件,主要指 html
、js
、jpg
、css
等文件后缀的网页素材。这类加速对延迟要求较高,因为通常而言,页面加载时间的加长对用户流失会造成巨大影响。
延迟主要包括以下 3 个性能指标:建立连接时间、首包时间、内容下载时间。其中,首包时间是最核心的指标。
在上传路径中,首包时间主要包含了 DNS 解析时间、TCP 用时、SSL 用时、发送时间和响应时间。上传
在下载路径中,首包时间主要包含了 DNS 解析时间、TCP 用时、SSL 用时、发送时间、响应时间和下载用时。下载
大文件下载,一般指各类单个文件大小大于 20M 的下载。因此对这类场景,最核心的指标就是 下载速度 和 下载总时间。
视音频点播的场景,主要涵盖 flv
、mp4
、wmv
、mkv
等视音频文件。在这类场景中的主要衡量指标包括首播时间和卡顿率:
每个 CDN 服务提供商的配置信息不同。
动态加速针对动态资源进行加速分发。
对于常用的 TCP 连接,在公网上传输的时候经常会丢数据,导致 TCP 的窗口始终很小,发送速度上不去。根据前面的 TCP 流量控制和拥塞控制的原理,在 CDN 加速网络中可以调整 TCP 的参数,使得 TCP 可以更加激进地传输数据。可以通过多个请求复用一个连接,保证每次动态请求到达时。连接都已经建立了,不必临时三次握手或者建立过多的连接,增加服务器的压力。另外,可以通过对传输数据进行压缩,增加传输效率。所有这些手段就像冷链运输,整个物流优化了,全程冷冻高速运输。不管生鲜是从你旁边的超市送到你家的,还是从产地送的,保证到你家是新鲜的。
一些关于 CDN 的常见问题: