CDN 性能

CDN 的一大优势是它能够快速、高效地交付内容。CDN 性能优化可分为三个类别。浏览 CDN 指南。

学习目标

阅读本文后,您将能够:

  • 了解 CDN 改善加载时间的方式
  • 对比使用 CDN 与不使用 CDN
  • 探索 CDN 缓存的基本信息
  • 了解 CDN 如何缩减文件大小

复制文章链接

CDN 如何改善加载时间?

基本上,互联网上的每个人都体验过内容分发网络(CDN)的好处。包括 Google、Apple 和 Microsoft 等公司在内的大多数技术公司都使用 CDN 来减少加载网页内容的延迟。


CDN 通常会将服务器放置在不同网络之间的交换点。这些互联网交换点(IXP)是不同互联网提供商连接的主要位置,以便彼此提供对来自其不同网络的流量的访问。除了 IXP 外,CDN 还将服务器放置在位于全球高流量区域和战略位置的数据中心,以便能够尽快移动流量。


CDN 的一大优势是它能够快速、高效地交付内容。CDN 性能优化可分为三个类别。

  1. 缩短距离:缩短客户端与所请求数据之间的物理距离
  2. 优化硬件/软件:提高服务器端基础结构的性能,例如通过使用固态硬盘驱动器和高效负载均衡
  3. 减少数据传输:采用各种技术来减小文件大小,以便快速进行初始页面加载

为了便于理解使用 CDN 的好处,我们来看看没有 CDN 时普通客户端/服务器数据传输会是什么样子。

使用 CDN 和不使用 CDN 在加载时间上有何不同?

假设纽约的某个人需要访问新加坡服务器上托管的网站。这两个位置相隔甚远,物理距离为大约 9,520 英里。

无 CDN 时的距离

如果承载网站内容的服务器(源站服务器)位于新加坡,则对各个网页资产的每个请求都必须从纽约前往新加坡,然后再返回。如同搭乘具有许多连接点的国际航班一样,每个请求在从 A 点传到 B 点的远距路程中都要经过一系列路由器。


如果要查看计算机从当前位置到达特定 Web 服务需要多少个不同连接点(跃点)的真实示例,可以使用桌面端计算机探索一下 traceroute 实用程序。

CDN 传输时间改进

请求从纽约到新加坡必须沿途经过每个路由器位置,因此总距离和每个路由器处理请求所花费的时间都会增加传输时间(延迟)。一旦源站服务器处理了请求并响应了发出请求的客户端,它就会将信息发送回去,通过类似的路由器序列后返回到纽约。此总往返行程的度量在电信中称为 RTT(往返时间)。暂时忽略可用带宽和潜在的网络拥塞,我们来看一个延迟因素的例子。


为便于阐述,我们假设:

  • 请求从纽约到新加坡需要 250 毫秒。
  • 建立一个 TCP/IP 连接将添加 3 次 250 毫秒延迟。
  • 网页需要 5 个不同的资产,包括图片、JavaScript 文件和网页本身。

我们粗略看一下该网页的加载时间:

  • 750 毫秒:在纽约的客户端和新加坡的源站服务器之间建立 TCP/IP 连接。
  • 250 毫秒:对网页的 HTTP 请求从纽约传送到新加坡。
  • 250 毫秒:纽约的请求者收到来自新加坡的源站服务器的响应,响应中包含 200 状态码和包括所有需要的其他资产的网页。
  • 250 毫秒:纽约的客户端请求这 5 项资产中的每一项。
  • 1500 毫秒:这五项资产从新加坡的源站服务器异步交付给客户端。

在这个简单示例中,网页加载的总传输时间约为 3000 毫秒


如您所见,每次发出请求并发送响应时,都要遍历纽约客户与新加坡源站之间的整个路径。随着网站规模扩大并需要更多资产,A 点和 B 点之间的延迟会不断增加。


我们再看一下向纽约的 Web 客户端提供托管在新加坡的内容的示例,但这一次新加坡站点使用一个在亚特兰大设有服务器的 CDN,其含有静态网站的缓存副本:

  • 请求从纽约到亚特兰大需要 50 毫秒。
  • 建立一个 TCP/IP 连接将添加 3 次 50 毫秒延迟
  • 网页需要 5 个不同的资产,包括图片、JavaScript 文件和网页本身。

我们粗略看一下该网页使用 CDN 时的加载时间:

  • 150 毫秒:在纽约的客户端和亚特兰大的边缘服务器之间建立 TCP/IP 连接。
  • 50 毫秒:对网页的 HTTP GET 请求从纽约传送到边缘服务器。
  • 50 毫秒:客户端收到来自边缘服务器的响应,响应中包含网页以及还需要的其他资产的列表。
  • 50 毫秒:客户端请求这 5 项资产中的每一项。
  • 800 毫秒:这五项资产从边缘服务器异步交付给客户端。

网页加载的总传输时间约为 1100 毫秒

CDN 距离优化

在本例中,客户端与内容之间距离缩短使静态内容的延迟时间缩短了 1900 毫秒;也就是说,加载时间缩短了将近 2 秒钟。

CDN 延迟改进

通过缩短所有必要流量都需要遍历的总距离,网站的每一用户都能节省大量加载时间。用户会随着等待时间增加而开始迅速离开站点(跳出),因此这种改进既代表了更好的用户体验,也代表着更长的页面停留时间。

CDN 如何加载内容?什么是高速缓存?

如前文所述,当客户端从源站服务器请求文件时,请求通常需要传送到服务器,然后再传回来。CDN 在称为“高速缓存”的过程中将静态内容文件从源站服务器拉取到分布式 CDN 网络中,从而减少延迟。某些 CDN 具有高级功能,允许有选择地高速缓存动态内容。数据经过高速缓存之后,CDN 将从最近的 CDN 数据中心向客户端提供内容。

无 CDN 高速缓存时的请求
有 CDN 缓存时的请求

完成 TCP 握手后,客户端计算机向 CDN 的网络发出 HTTP 请求。如果内容尚未缓存,则 CDN 将首先通过在源站服务器和 CDN 边缘服务器之间进行额外请求,从源站下载内容。


典型的 CDN 高速缓存过程包含以下 4 个步骤:

  1. 当用户请求网页时,用户的请求被路由到 CDN 中最近的边缘服务器
  2. 边缘服务器接着向源站服务器请求用户请求的内容。
  3. 源站响应边缘服务器的请求。
  4. 最后,边缘服务器响应客户端。
CDN 高速缓存请求

CDN 与客户端的近距离价值是在向源站服务器发出初始请求之后体现出来的。一旦数据从源站服务器高速缓存到 CDN 网络中,来自客户端的每个后续请求都只需到达最近的边缘服务器即可。这意味着,如果最近的边缘服务器比源站服务器近,就能减少延迟,并且更快提供内容。

缓存的 CDN 边缘响应

务必要牢记一点,这不包括下载资产以及处理请求和响应所需的时间;到目前为止,仅计算在两个位置之间传输信息所需的传输时间。我们将探索的其他重要延迟因素还包括数据缩减、硬盘速度和网络拥塞。

CDN 如何通过缩减文件大小来提高速度?

为缩短页面加载时间,CDN 减少 CDN 的高速缓存服务器和客户端之间的总体数据传输量。当传输的数据总量下降时,延迟和所需带宽都会减少。带来的结果是更快的页面加载和更低的带宽费用。这些缩减包括两个关键组成部分:


极简化:极简化是指通过删除用于帮助人类了解所发生情况的所有组件来减少代码块大小的过程。尽管工程师需要将想法分解为合理的变量名称、空格和注释,以使代码块易于阅读和维护,但计算机在删除这些字符后仍然可以成功运行代码。

下方列出了极简化前后的代码块:

极简化之前:八行代码

未极简化的 CDN

极简化之后:缩减为一行代码

CDN 极简化

现在,代码片段已从八行减少到一行,整个文件的大小也缩小。这意味着传输文件所需的时间将缩短,减少了延迟并有助于更快加载内容。


文件压缩:若要减少通过互联网传输数据时所需的延迟和带宽消耗,文件压缩是一个重要组成部分。GZip 是常用的压缩方法,视为传输网页时所用的一种最佳实践。许多 CDN 提供商默认情况下都启用 GZip。GZip 压缩的节省程度有多大?通常,压缩后的文件的大小比初始文件小大约 50% 到 70%。

CDN 可以利用哪些硬件来提高速度?

就 CDN 硬件优化而言,与传统硬盘驱动器(HDD)相比,使用固态硬盘(SSD)具有显著的优势。固态驱动器打开文件的速度比传统硬盘驱动器最多快 30%,而且更具弹性和可靠性。


与电唱机类似,传统硬盘驱动器由旋转的圆形金属碟片构成,碟片上的磁性涂层可以存储数据。当碟片旋转时,上方臂架上的读/写头可以访问信息。这是一种机械过程,会受到碟片旋转速度的影响。随着固态驱动器的诞生,旧式硬盘驱动器的使用已在减少,但它们目前仍在生产,并在许多计算机系统中广泛使用。


固态驱动器(SSD)也是一种持久性存储形式,但其功能与 USB 优盘驱动器或常见于数码相机等设备中的存储卡更为相似;它们都没有活动部件。如果常规硬盘正在运转并且系统陷入混乱,则 HDD 可能会跳过,导致读/写错误和潜在的停机时间。SSD 的另一大优势是访问碎片化文件。文件碎片化指的是文件的多个部分位于磁盘的不同位置上,这会导致 HDD 驱动器访问速度变慢。由于 SSD 可以有效访问不连续的存储位置,因此碎片化不会对性能造成威胁。


在首批 CDN 中,数据存储在硬盘驱动器上。现在的一些 CDN 服务将所有边缘缓存放在固态驱动器上进行。SSD 的缺点是成本高昂;SSD 的成本可达传统介质的 5 倍。因此,一些 CDN 服务通常会避免使用 SSD,而选用较旧的技术。Cloudflare CDN 仅使用 SSD。