CDN - 为什么地球另一端的网站也能秒开

从日本访问美国的服务器,仅通过海底光缆就会产生超过 50 毫秒的单程延迟。然而在观看 Netflix 或 YouTube 时,你几乎感觉不到这种延迟。原因就是 CDN (Content Delivery Network,内容分发网络)。

CDN 将内容的副本分布到世界各地的服务器 (边缘服务器) 上,从离用户最近的服务器提供内容。当你访问 IP 确认时,你是否想过响应来自哪台服务器?

CDN 的工作原理 - 三大核心技术

1. 分布式边缘服务器部署

主要 CDN 提供商在全球数百到数千个地点部署服务器。Cloudflare 在超过 300 个城市设有节点,Akamai 在超过 130 个国家运营。仅在日本,东京、大阪等地就部署了多台边缘服务器。

2. 基于 DNS 的路由

当用户访问启用了 CDN 的网站时,DNS 会返回离用户最近的边缘服务器的 IP 地址。东京的用户会被分配到东京的边缘服务器,伦敦的用户则会被分配到伦敦的边缘服务器。

3. 缓存

边缘服务器会缓存 (临时存储) 从源站服务器获取的内容。后续对相同内容的请求可以直接从边缘服务器的缓存中即时响应,无需再次查询源站服务器。

CDN 解决的三大问题

降低延迟

光速有其极限,物理距离带来的延迟不可避免。CDN 通过将内容放置在用户附近,最大限度地减少这种物理延迟。从东京访问美国源站服务器的 RTT 超过 100 毫秒,但从东京边缘服务器访问则不到 5 毫秒。

减轻源站服务器负载

即使数百万用户同时访问热门网站,大部分请求都由边缘服务器缓存处理,极大地减轻了源站服务器的负载。

DDoS 攻击缓解

CDN 的分布式基础设施将 DDoS 攻击流量分散到全球各地的边缘服务器上,缓解了原本会集中在单一服务器上的攻击。Cloudflare 和 Akamai 提供集成了 CDN 和 DDoS 防护的服务。

CDN 背后的魔法 - Anycast

CDN 用来路由到"最近服务器"的机制之一是 Anycast。通过 Anycast,全球多台服务器共享同一个 IP 地址。当用户访问该 IP 地址时,BGP 路由会自动将其引导到网络距离最近的服务器。

Cloudflare 的 DNS 服务 (1.1.1.1) 就是 Anycast 的典型案例。无论你在世界哪个角落访问 1.1.1.1,都会连接到最近的 Cloudflare 服务器。

如何判断网站是否使用了 CDN

  • HTTP 响应头Server: cloudflareX-Cache: HITVia: 1.1 varnish 等响应头可以确认 CDN 的使用
  • DNS CNAME:查询域名的 DNS 记录,通常会发现指向 CDN 提供商域名的 CNAME 记录 (例如 d1234.cloudfront.net)
  • traceroute:如果最后一跳位于 CDN 提供商的网络内,说明你正在通过 CDN 访问

总结

CDN 是互联网对物理距离这一不可逾越限制的最实用解决方案。通过将内容放置在用户附近,CDN 有效地"绕过"了光速的限制。

当你访问 IP 确认时,不妨在浏览器的开发者工具中查看响应头。你或许能看到 CDN 缓存命中状态和边缘服务器位置信息。

相关术语

DNS CDN 用来将用户路由到最近边缘服务器的基础技术。 IP 地址 通过 Anycast,多台服务器共享同一个 IP 地址。 延迟 CDN 主要降低的指标。边缘服务器的距离决定了延迟大小。 BGP Anycast 路由的基础。决定到达最近边缘服务器的路径。 HTTPS CDN 边缘服务器执行 TLS 终止并提供加密通信。