使用CDN加速静态内容交付
介绍
现代网站和应用程序通常必须向最终用户提供大量静态内容。 此内容包括图像、样式表、JavaScript 和视频。 随着这些静态资产数量和大小的增长,带宽使用量激增,页面加载时间增加,从而恶化用户的浏览体验并减少服务器的可用容量。
为了显着减少页面加载时间、提高性能并降低带宽和基础设施成本,您可以实施 CDN,或 content delivery n 网络,在一组地理分布的服务器上缓存这些资产。
在本教程中,我们将提供 CDN 及其工作原理的高级概述,以及它们可以为您的 Web 应用程序提供的好处。
什么是 CDN?
内容交付网络是一个地理分布的服务器组,经过优化以向最终用户交付静态内容。 这种静态内容几乎可以是任何类型的数据,但 CDN 最常用于交付网页及其相关文件、流式视频和音频以及大型软件包。
CDN 由位于不同位置的多个 存在点 (PoP) 组成,每个由多个 边缘 服务器组成,这些服务器缓存来自您的 origin 或主机服务器的资产。 当用户访问您的网站并请求图像或 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 边缘服务器组成,这些服务器并置在 Internet 交换点 (IxP),本质上是 Internet 服务提供商 (ISP) 用来互连其网络的数据中心。 然后,CDN 的内部负载平衡器将请求路由到位于此 PoP 的边缘服务器,然后将内容提供给用户。
缓存机制因 CDN 提供商而异,但通常它们的工作方式如下:
- 当 CDN 收到对静态资产(例如 PNG 图像)的第一个请求时,它没有缓存资产,并且必须从附近的 CDN 边缘服务器或源服务器本身获取资产的副本。 这称为缓存“未命中”,通常可以通过检查包含
X-Cache: MISS
的 HTTP 响应标头来检测。 此初始请求将比未来请求慢,因为在完成此请求后,资产将被缓存在边缘。 - 路由到此边缘位置的此资产的未来请求(缓存“命中”)现在将从缓存中提供服务,直到到期(通常通过 HTTP 标头设置)。 这些响应将比初始请求快得多,从而显着减少用户的延迟并将 Web 流量卸载到 CDN 网络上。 您可以通过检查 HTTP 响应标头来验证响应是否来自 CDN 缓存,该标头现在应包含
X-Cache: HIT
。
要了解有关特定 CDN 如何工作和实施的更多信息,请查阅您的 CDN 提供商的文档。
在下一节中,我们将介绍两种流行的 CDN 类型:push 和 pull CDN。
推与。 拉区
大多数 CDN 提供商提供两种缓存数据的方式:拉区和推送区。
Pull Zones 涉及输入您的源服务器地址,并让 CDN 自动获取和缓存您站点上所有可用的静态资源。 拉取区域通常用于交付经常更新的中小型 Web 资产,例如 HTML、CSS 和 JavaScript 文件。 在向 CDN 提供您的源服务器地址后,下一步通常是重写指向静态资产的链接,以便它们现在指向 CDN 提供的 URL。 从那时起,CDN 将处理您用户的传入资产请求,并根据需要从其地理分布的缓存和您的来源中提供内容。
要使用 推送区 ,您需要将数据上传到指定的存储桶或存储位置,然后 CDN 会将其推送到其分布式边缘服务器队列上的缓存中。 推送区域通常用于较大且不经常更改的文件,例如档案、软件包、PDF、视频和音频文件。
使用 CDN 的好处
几乎任何站点都可以通过推出 CDN 获得好处,但通常实施 CDN 的核心原因是将带宽从源服务器卸载到 CDN 服务器,并减少地理上分散的用户的延迟。
我们将在下面介绍这些以及使用 CDN 提供的其他几个主要优势。
原点卸载
如果您的服务器的带宽容量已接近极限,卸载图像、视频、CSS 和 JavaScript 文件等静态资产将大大减少服务器的带宽使用量。 内容交付网络是为提供静态内容而设计和优化的,客户端对该内容的请求将被路由到边缘 CDN 服务器并由其提供服务。 这具有减少原始服务器负载的额外好处,因为它们随后以低得多的频率提供这些数据。
降低延迟以改善用户体验
如果您的用户群在地理上分散,并且您的流量的重要部分来自遥远的地理区域,则 CDN 可以通过在更靠近用户的边缘服务器上缓存静态资产来减少延迟。 通过缩短用户与静态内容之间的距离,您可以更快地向用户交付内容,并通过提高页面加载速度来改善他们的体验。
对于主要服务于带宽密集型视频内容的网站而言,这些优势更加复杂,高延迟和慢加载时间更直接地影响用户体验和内容参与度。
管理流量高峰并避免停机
CDN 允许您通过跨大型分布式边缘服务器网络的负载平衡请求来处理大量流量峰值和突发。 通过在交付网络上卸载和缓存静态内容,您可以使用现有基础架构同时容纳更多用户。
对于使用单个源服务器的网站,这些巨大的流量峰值通常会使系统不堪重负,从而导致计划外的中断和停机。 将流量转移到高可用性和冗余的 CDN 基础架构上,旨在处理不同级别的 Web 流量,可以提高资产和内容的可用性。
减少开支
由于提供静态内容通常占您带宽使用量的大部分,因此将这些资产卸载到内容交付网络可以大大减少您每月的基础设施支出。 除了降低带宽成本外,CDN 还可以通过减少源服务器上的负载来降低服务器成本,从而使您现有的基础架构能够扩展。 最后,一些 CDN 提供商提供固定价格的按月计费,允许您将可变的每月带宽使用量转变为稳定、可预测的经常性支出。
提高安全性
CDN 的另一个常见用例是 DDoS 攻击缓解。 许多 CDN 提供商包括监控和过滤对边缘服务器的请求的功能。 这些服务分析网络流量中的可疑模式,阻止恶意攻击流量,同时继续允许信誉良好的用户流量通过。 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 可以成为一种有影响力的工具,用于保护和优化高流量网站。