使用CDN加速静态内容交付

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

介绍

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

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

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

什么是CDN?

内容传送网络是地理上分布的服务器组,其被优化以向最终用户传送静态内容。 这种静态内容几乎可以是任何类型的数据,但CDN最常用于提供网页及其相关文件,流式视频和音频以及大型软件包。

没有CDN的内容交付图

CDN由不同位置的多个存在点 (PoP)组成,每个存在点由多个边缘服务器组成,这些服务器缓存来自您的或主机服务器的资产。 当用户访问您的网站并请求静态资产(如图像或JavaScript文件)时,他们的请求将由CDN路由到最近的边缘服务器,从该服务器提供内容。 如果边缘服务器没有缓存资产或缓存资产已过期,则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在此端点(位于边缘,比后端服务器更靠近用户)接收到用户请求,它就会将请求路由到最靠近用户的Point of Presence(PoP)。 此PoP通常由一个或多个位于Internet交换点(IxP)并置的CDN边缘服务器组成,这些服务器本质上是Internet服务提供商(ISP)用于互连其网络的数据中心。 然后,CDN的内部负载均衡器将请求路由到位于此PoP的边缘服务器,然后该服务器将内容提供给用户。

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

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

要了解有关特定CDN如何工作和已实施的更多信息,请参阅CDN提供商的文档。

在下一节中,我们将介绍两种流行的CDN类型: 推送拉取 CDN。

Push vs. Pull Zones

大多数CDN提供商提供两种缓存数据的方法:拉区和推区。

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

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

使用CDN的好处

几乎任何站点都可以获得通过推出CDN提供的好处,但通常实现一个站点的核心原因是将带宽从源服务器卸载到CDN服务器上,并减少地理分布用户的延迟。

我们将通过以下使用CDN来解决这些以及其他一些主要优势。

原点卸载

如果您的服务器上的带宽容量接近,那么卸载静态资产(如图像,视频,CSS和JavaScript文件)将大大降低服务器的带宽使用率。 内容传送网络的设计和优化是为了提供静态内容,客户端对此内容的请求将被路由到边缘CDN服务器并由其提供服务。 这具有减少原始服务器负载的额外好处,因为它们以更低的频率提供此数据。

降低延迟以改善用户体验

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

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

管理流量高峰并避免停机

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

对于使用单一源服务器的网站,这些大流量峰值通常会使系统崩溃,从而导致意外中断和停机。 将流量转移到高可用性和冗余CDN基础架构上,旨在处理不同级别的Web流量,可以提高资产和内容的可用性。

减少开支

由于服务静态内容通常占据您的带宽使用的大部分,因此将这些资产卸载到内容交付网络上可以大幅减少每月的基础架构支出。 除了降低带宽成本外,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可以成为一种有效的保护工具,优化高流量网站。