CDN 详解

To see a world in a grain of sand
And a heaven in a wild flower
Hold infinity in the palm of your hand
And eternity in an hour


1. 什么是 CDN

CDN(Content Delivery Network)内容分发网络。CDN依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取内容,降低网络延迟,提高访问速度。简单来讲,CDN是用来进行加速的,它可以让用户更快获得所需的数据。

CDN 的主要功能;

  • 网站加速:解决因分布、带宽、服务器性能等带来的访问延迟问题,适用于站点加速、点播、直播等场景。使用户可就近取得所需内容,解决 Internet 网络拥挤的状况,提高用户访问网站的响应速度和成功率。
  • 网站防护:分布式集群架构,避免单机故障。隐藏数据所在主机 IP,加速防护,镜像节点,自动切换,就近访问等超强防 CC DDoS 攻击能力。

2. CDN 访问过程

假设通过CDN加速的域名为www.a.com,接入CDN网络,开始使用加速服务后,当用户发起HTTP请求时,处理流程如下:

  1. 当用户向 www.a.com 下的指定资源发起请求时,首先向 LDNS(本地DNS)发起域名解析请求。
  2. LDNS检查缓存中是否有www.a.com的 IP 地址记录。如果有,则直接返回给用户;如果没有,则向授权 DNS(root DNS)查询。
  3. 当授权DNS解析www.a.com时,返回域名CNAME www.a.tbcdn.com对应IP地址。
  4. 域名解析请求发送至 CDN 调度系统,并为请求分配最佳节点 IP 地址。
  5. LDNS获取 DNS 返回的解析 IP 地址。
  6. 用户获取解析 IP 地址。
  7. 用户向获取的 IP 地址发起对该资源的访问请求。

3. CDN 网络架构

CDN 网络架构主要有两部分:中心节点、边缘节点。其中中心节点由 CDN 网管中心与 DNS 重定向解析中心组成,负责全局负载均衡;边缘节点是 CDN 分发的载体,由 Cache 与负载均衡器组成。

3.1 中心节点

当用户访问 CDN 服务的网站时,全局负载均衡 DNS 负责域名解析,通过一组预先定义好的策略将与用户最相近的节点 IP 地址提供给用户,用户通过这个 IP 进行资源的请求。同时,全局负载均衡 DNS 还与全球 CDN 节点保持通信,确保请求可以分配到可用的节点(起到负载均衡的作用)

3.2 CDN 节点

每个 CDN 节点由两部分组成:负载均衡设备和高速缓存服务器(Cache)。

负载均衡设备负责每个节点中各个 Cache 的负载均衡,保证节点的工作效率;同时负载均衡设备还负责收集节点与周围环境的信息,保持与全局负载 DNS 的通信。

Cache 负责存储客户网站的大量信息,就像一个靠近用户的网站服务器一样响应本地用户的访问请求。理论上,最简单的 CDN 网络有一个负责全局负载均衡的 DNS 和各节点一台 Cache,即可运行。DNS 支持根据源 IP 地址解析成不同的 IP 地址,实现就近访问。

4. CDN 核心技术

4.1 内容路由

CDN 负载均衡系统将用户的请求导向整个 CDN 网络中的最佳节点,它的准确性和效率性决定了 CDN 的性能和效率。

通常将负载均衡分为两个层次:全局负载均衡和本地负载均衡。从用户请求发起到最终请求到 CDN 节点过程中,请求从整个网络范围定向到最近区域主要由全局负载均衡控制;定向到最近区域后,需要将请求达到最合适的 CDN 节点,就由本地负载均衡控制。

在整个过程中,CDN 节点的负载情况,健康状况以及支持的媒体格式等运行状态都是本地负载均衡进行检测。本地负载均衡选择合适的节点时,会动态获取 Cache 的运行状态,再更加状态进行挑选。获取 Cache 状态有两种方式:主动探测(ping)和协议交互。

4.2 内容分发

当源站内容发生改变,需要同步到 CDN 的 Cache 中。这个过程目前有两种实现方式:

  • Push:主动分发。将内容从源站分发到 Cache 节点。协议采用 HTTP/FTP 等,通过 Push 方式分发的内容一般都是高热内容。
  • Pull:被动拉取。一般时用户再请求边缘 Cache 时发现资源不再或者边缘定时从源站中拉取资源,并保持到 Cache 中。

4.3 内容管理

内容管理主要为 Cache 内的内容管理,主要是为了提高内容服务的效率与提高存储利用率。主要包括本地内容索引,本地内容拷贝以及本地内容访问状态信息等。通过本地内容管理,可以将内容的管理从原来的 Cache 设备一级,提高到 CDN 节点一级,从而大大增加了 CDN 的可扩展性和综合能力。(将整个 CDN 节点作为一个虚拟 Cache 池,通过内容管理决定存储到哪台物理机,是否备份等)

5. 流媒体 CDN

流媒体业务是一种对实时性、连续性、时序性要求非常高的业务,无论从带宽消耗还是质量保障上来说,对 best-effort(最大努力交付) 的 IP 网络都是不小的冲击。在点播、直播中,常用的互联网协议有:RTP、RTCP、RTSP、RTMP、HTTP Streaming 协议等。

  • RTP(Real-time Transport Protocol):是用于 Internet 上针对多媒体数据流的一种传输协议,RTP 被定义为在一对一或一对多的传输情况下工作,其目的是提供时间信息和实现流同步。RTP 通常使用 UDP 来传送数据,但也可以在 TCP 或 ATM 等其他协议上工作。当应用程序开启一个 RTP 会话时将使用两个端口,一个给 RTP,一个给 RTCP。RTP 本身并不能为顺序传输数据报提供可靠的传输机制,也不提供流量控制和拥塞控制,它依靠 RTCP 提供这些服务。通常 RTP 算法并不作为一个单独的网络层实现,而是作为应用程序的代码。
  • RTCP(Real-time Transport Control Protocol):和 RTP 一起提供流量控制和拥塞控制。在 RTP 会话期,各参与者周期性地传送 RTCP 包,RTCP 包中含有已发送地数据包的数量,丢失的数据报的数量等统计资料,因此,服务器可以利用这些信息动态地改变传输速率,甚至改变有效载荷类型。RTP 和 RTCP 配合使用特别适合传送网络上的实时数据。
  • RTSP(Real-time Streaming Protocol):由 Real Networks 和 Netscape 共同提出的。该协议定义了一对多的应用程序如何有效通过 IP 网络传输多媒体数据。RTSP 在体系结构上位于 RTP 和 RTCP 之上。它使用 TCP 或 RTP 完成数据传输。
  • HTTP Streaming 首先会将视频数据在服务器上进行编码,然后将编码后的数据进行更细粒度的分片,再把每个分片通过 HTTP 协议传输到客户端。HTTP Streaming 的客户端需要对视频文件的每个分片都发出一个 HTTP 请求,这样,在视频播放速度低于下载速度的情况下,客户端可以灵活控制 HTTP 请求的发出速度,从而保证用户在中途退出不会出现下载浪费。另外,采用分片的特点,HTTP Streaming 还可以实现媒体播放过程中的码率切换(码率自适应),结合网络带宽资源等,给用户提供更好的体验。

因为流媒体文件传输带宽需求高,而且往往需要维持 TCP 长连接,所以一旦 CDN 回源比例过高,源站服务器 I/O 将不堪负荷。所以在流媒体 CDN 中更考虑 CDN 调度的命中率。为了进一步提高命中率,流媒体 CDN 普遍采用了 PUSH 方式的内容分发策略。同时,与 Web CDN 中心——边缘的两级架构不同,流媒体 CDN 通常是中心——区域——边缘的三级架构,主要是防止流媒体回源造成服务器崩溃的情况。

参考文献:

updatedupdated2022-07-012022-07-01