介绍

现代网站和应用程序通常必须向最终用户提供大量静态内容。此内容包括图像,样式表,JavaScript和视频。随着这些静态资产的数量和大小增加,带宽使用量激增,页面加载时间增加,从而恶化了用户的浏览体验并减少了服务器的可用容量。

为了显着减少页面加载时间,提高性能并降低带宽和基础架构成本,您可以实施CDN或内容交付网络,以将这些资产缓存在一组地理位置分散的服务器上。

在本教程中,我们将概述CDN,它们的工作方式以及它们可以为您的Web应用程序带来的好处。

什么是CDN?

内容交付网络是一组地理分布的服务器,经过优化可将静态内容交付给最终用户。静态内容几乎可以是任何类型的数据,但CDN最常用于传递网页及其相关文件,流式视频和音频以及大型软件包。

CDN由位于不同位置的多个状态点(PoP)组成,每个位置都由几个边缘服务器组成,这些边缘服务器缓存了源服务器或主机服务器的资产。当用户访问您的网站并请求静态资产(例如图像或JavaScript文件)时,CDN将他们的请求路由到最近的边缘服务器,从该边缘服务器提供内容。如果边缘服务器没有缓存资产或缓存的资产已过期,则CDN将从附近的其他CDN边缘服务器或您的原始服务器获取并缓存最新版本。如果CDN边缘确实为您的资产提供了一个缓存条目(如果您的网站收到的流量较少,则大多数情况下会出现),它将把缓存的副本返回给最终用户。

这使地理位置分散的用户可以最大程度地减少接收静态内容所需的跃点数,从而直接从附近边缘的缓存中获取内容。结果是大大减少了等待时间和数据包丢失,加快了页面加载时间,并极大地减少了原始基础架构上的负载。

CDN提供商通常会提供额外的功能,例如缓解DDoS和限制速率,用户分析以及针对流或移动用例的优化,但需要额外付费。

CDN如何工作?

用户访问您的网站时,他们首先会收到来自DNS服务器的响应,其中包含您主机Web服务器的IP地址。然后,他们的浏览器请求网页内容,该内容通常由各种静态文件组成,例如HTML页面,CSS样式表,JavaScript代码和图像。

推出CDN并将这些静态资产卸载到CDN服务器上后,可以通过手动“推送”资产或让CDN自动“提取”资产(下一部分将介绍这两种机制),然后指示Web服务器重写指向静态内容的链接,以使这些链接现在指向CDN托管的文件。如果您使用的是WordPress之类的CMS,则可以使用CDN Enabler之类的第三方插件来实现此链接重写。

许多CDN提供对自定义域的支持,允许您在域下创建指向CDN端点的CNAME记录。 CDN在此端点(位于边缘,比后端服务器更靠近用户)处收到用户请求后,便将请求路由到最接近用户的存在点(PoP)。该PoP通常由一个或多个CDN边缘服务器组成,这些CDN边缘服务器并置在Internet交换点(IxP)上,这实际上是Internet服务提供商(ISP)用于互连其网络的数据中心。然后,CDN的内部负载平衡器将请求路由到位于此PoP的边缘服务器,然后边缘服务器将内容提供给用户。

缓存机制因CDN提供程序而异,但通常它们的工作方式如下:

  1. 当CDN收到对静态资产(例如PNG图像)的第一个请求时,它没有缓存资产,必须从附近的CDN边缘服务器或原始服务器本身获取资产的副本。这被称为缓存“未命中”,通常可以通过检查包含X-Cache:MISS的HTTP响应标头来检测到。此初始请求将比以后的请求慢,因为完成此请求后,资产将被缓存在边缘。
  2. 路由到此边缘位置的对此资产的未来请求(缓存“命中”)现在将从缓存中提供,直到到期(通常通过HTTP标头设置)。这些响应将比初始请求快得多,从而大大减少了用户的等待时间,并将Web流量转移到CDN网络上。您可以通过检查HTTP响应标头(现在应包含X-Cache:HIT)来验证响应是从CDN缓存提供的。

要详细了解特定CDN的工作原理和实施方式,请查阅CDN提供商的文档。

在下一节中,我们将介绍两种常见的CDN类型:推式和拉式CDN。

推区与拉区

大多数CDN提供程序都提供两种缓存数据的方式:拉区和推区。

拉区涉及输入您的原始服务器的地址,并让CDN自动获取并缓存您站点上所有可用的静态资源。拉区通常用于交付频繁更新的中小型Web资产,例如HTML,CSS和JavaScript文件。向CDN提供原始服务器的地址后,下一步通常是重写指向静态资产的链接,以使它们现在指向CDN提供的URL。从那时起,CDN将处理用户的传入资产请求,并根据其地理位置分布的缓存和您的来源提供内容。

要使用推送区域,您需要将数据上传到指定的存储桶或存储位置,然后CDN会将其推送到其分布式边缘服务器群中的缓存中。推区通常用于较大的,不经常更改的文件,例如档案,软件包,PDF,视频和音频文件。

使用CDN的好处

几乎任何站点都可以享受到部署CDN所带来的好处,但是通常,实现这一目的的主要原因是将源服务器的带宽卸载到CDN服务器上,并减少地理上分散的用户的延迟。

我们将在下面介绍通过使用CDN提供的这些以及其他一些主要优势。

原点卸载

如果您即将达到服务器的带宽容量,则卸载静态资产(例如图像,视频,CSS和JavaScript文件)将大大减少服务器的带宽使用量。内容交付网络的设计和优化是为了提供静态内容,并且对此内容的客户端请求将路由到边缘CDN服务器并由其提供服务。这样做还有一个好处,那就是减少了原始服务器上的负载,因为原始服务器随后以较低的频率提供数据。

较低的延迟以改善用户体验

如果用户群在地理位置上分散,并且流量的重要部分来自遥远的地理区域,则CDN可以通过将静态资产缓存在离您更近的边缘服务器上来减少延迟。通过缩短用户与静态内容之间的距离,您可以更快地向用户交付内容,并通过提高页面加载速度来改善他们的体验。

这些优势对于主要服务于带宽密集型视频内容的网站而言更为复杂,在这些网站中,高延迟和缓慢的加载时间会直接影响用户体验和内容参与度。

管理流量高峰并避免停机

CDN允许您通过跨大型分布式边缘服务器网络的负载平衡请求来处理大量流量高峰和突发事件。通过在交付网络上卸载和缓存静态内容,您可以在现有基础架构中容纳大量同时用户。

对于使用单个原始服务器的网站,这些巨大的流量高峰通常会使系统无法承受,从而导致计划外的停机和停机。将流量转移到旨在处理可变级别的Web流量的高可用性和冗余CDN基础结构上,可以提高资产和内容的可用性。

降低成本

由于提供静态内容通常占带宽使用的大部分,因此将这些资产卸载到内容交付网络上可以大大减少您每月的基础设施支出。除了减少带宽成本外,CDN还可以通过减少原始服务器上的负载来降低服务器成本,从而扩展现有基础架构。最后,某些CDN提供商提供固定价格的每月计费,使您可以将可变的每月带宽使用量转换为稳定的,可预测的经常性支出。

增加安全性

CDN的另一个常见用例是缓解DDoS攻击。许多CDN提供程序都包含监视和筛选对边缘服务器的请求的功能。这些服务分析Web流量中的可疑模式,阻止恶意攻击流量,同时继续允许信誉良好的用户流量通过。 CDN提供商通常提供各种DDoS缓解服务,从基础结构级别(OSI第3层和第4层)的常见攻击防护,到更高级的缓解服务和速率限制。

另外,大多数CDN允许您配置完整的SSL,以便可以使用CDN提供的或自定义的SSL证书对CDN与最终用户之间的通信以及CDN与原始服务器之间的通信进行加密。

选择最佳解决方案

如果瓶颈是原始服务器上的CPU负载而不是带宽,那么CDN可能不是最合适的解决方案。在这种情况下,使用流行的缓存(例如NGINX或Varnish)进行本地缓存可以通过为系统内存提供资源来显着减少负载。

在推出CDN之前,其他优化步骤(如最小化和压缩JavaScript和CSS文件以及启用Web服务器HTTP请求压缩)也可能对页面加载时间和带宽使用产生重大影响。

Google的PageSpeed Insights是衡量网页加载速度并提高网页加载速度的有用工具。 Pingdom是另一个有用的工具,它可以对请求和响应时间进行瀑布式分解,并提供建议的优化方法。

结论

内容交付网络可以是快速有效的解决方案,用于提高网站的可伸缩性和可用性。通过将静态资产缓存在优化服务器的地理分布网络上,可以极大地减少最终用户的页面加载时间和延迟。此外,CDN可以通过吸收用户请求并从边缘的缓存进行响应来显着减少带宽使用,从而降低带宽和基础架构成本。

借助对主要框架(如WordPress,Drupal,Django和Ruby on Rails)的插件和第三方支持,以及DDoS缓解,完全SSL,用户监控和资产压缩等附加功能,CDN可以成为保护和保护用户的有效工具。优化高流量网站。