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: cloudflare、X-Cache: HIT、Via: 1.1 varnish等响应头可以确认 CDN 的使用 - DNS CNAME:查询域名的 DNS 记录,通常会发现指向 CDN 提供商域名的 CNAME 记录 (例如
d1234.cloudfront.net) - traceroute:如果最后一跳位于 CDN 提供商的网络内,说明你正在通过 CDN 访问
总结
CDN 是互联网对物理距离这一不可逾越限制的最实用解决方案。通过将内容放置在用户附近,CDN 有效地"绕过"了光速的限制。
当你访问 IP 确认时,不妨在浏览器的开发者工具中查看响应头。你或许能看到 CDN 缓存命中状态和边缘服务器位置信息。