一、引言

CDN(Content Delivery Network,内容分发网络)的本质是通过分布式节点缓存内容,将用户请求导向离其最近的边缘服务器,从而减少网络延迟和传输距离。它的运行依赖两个关键组成部分:全局负载均衡(GSLB)缓存系统,两者在技术上分别对应 DNS 和缓存代理技术。如果把 CDN 比作一个庞大的物流网络,那么 GSLB 就是指挥中心,负责告诉用户“去哪个仓库取货最快”;而缓存系统就是遍布各地的仓库,负责把内容提前囤在用户附近。本文将围绕这两个核心机制,系统地梳理它们的工作原理。

二、CDN 的两大核心机制概览

在深入具体技术之前,先理清这两大机制各自的角色定位:

全局负载均衡(GSLB,Global Server Load Balancing) 是 CDN 的“神经中枢”,负责在全局范围内将用户请求调度到最优的边缘节点。其最常见的实现方式是基于 DNS 的智能解析——用户在浏览器输入域名后,DNS 系统并不是简单地返回一个固定 IP,而是综合考虑用户地理位置、网络运营商、节点健康状态等多维因素,动态返回最优节点的 IP 地址。

缓存系统则是 CDN 的“执行层”,由部署在全球各地的边缘节点构成。这些节点本质上就是缓存代理服务器(通常使用 Squid、Nginx 等开源软件构建),负责存储源站内容的副本,并直接响应用户请求。当缓存命中时,用户直接从边缘节点获取内容;未命中时,节点会代理用户向源站回源拉取,并将内容缓存至本地以备后续请求使用。

两者协同构成了 CDN 的完整工作链路:GSLB 决定“去哪”,缓存系统负责“给什么”。

三、全局负载均衡(GSLB)——基于 DNS 的智能调度

3.1 DNS 负载均衡的核心原理

GSLB 最常见的实现方式是基于 DNS 解析的负载均衡。其核心思路是将负载均衡能力嵌入 DNS 系统中:在用户发出任何应用连接请求时,首先必须通过 DNS 系统来获取服务器的 IP 地址,GSLB 正是在返回 DNS 解析结果的过程中进行智能决策,给用户返回一个最优的服务器 IP。

传统 DNS 本身也具备简单的负载分配能力——通过轮询机制,在权威服务器响应中轮换不同 IP 地址的排列顺序,客户端通常选择首个 IP 进行访问,从而实现基础的负载分摊。但这种方式只做机械轮询,不感知节点的实际状态和用户的地理差异。

基于 DNS 的 GSLB 则在此基础上做了“智能化”升级:建立 IP 地址访问列表,判断用户的访问来源,结合实时采集的节点状态数据,确定最优的访问节点。现代 CDN 的 GSLB 系统可结合用户 IP、网络质量、节点负载等 20 多个维度参数,动态选择最优边缘节点。

3.2 三种实现方式

基于 DNS 的 GSLB 具体有三种工程实现方式:

(1)通过 CNAME 方式实现负载均衡

这是目前业界使用最为广泛的方式,其本质是利用了 DNS 的两个机制——别名机制和轮询机制。具体做法是:先将 GSLB 的主机名定义为所查询域名的权威 DNS 服务器的别名(CNAME 记录),然后将 GSLB 主机名添加多条 A 记录,分别对应多个服务器的 IP 地址。本地 DNS 服务器会向客户端返回这些 IP 地址,且排列顺序是轮换的,客户端一般选择首个 IP 进行访问。这种方式实现简单且不需要更改公共 DNS 系统的配置,因此成为业界主流。

(2)负载均衡器作为权威 DNS 服务器

这种方式将负载均衡器本身注册为一个域名空间的权威 DNS 服务器,所有对该域的 DNS 请求都会直接发送到负载均衡器上,负载均衡器根据预设策略返回智能解析结果。这种方式的好处是控制力最强,但由于负载均衡器接管了权威 DNS 的所有解析工作,整个域的 DNS 解析能力或多或少会受影响,影响程度取决于负载均衡器实现的 DNS 功能完整度。

(3)负载均衡器作为代理 DNS 服务器

在这种方式下,负载均衡器被注册为对外公布的权威 DNS 服务器地址(VIP),而真正的权威 DNS 服务器部署在负载均衡器后面。所有 DNS 请求先到达负载均衡器,由其转发至真正的权威服务器,然后修改权威服务器返回的响应信息,替换为最优节点的 IP 地址。这种方式在保持控制力的同时,降低了对 DNS 系统本身的冲击。

3.3 调度决策的多维依据

GSLB 系统接收解析请求后,会实时采集多类核心数据,构建多维决策模型:

  • 地理位置数据:通过 GeoIP 数据库解析用户本地 DNS 的 IP,定位用户所在国家、省份、城市,筛选物理距离最近的边缘节点池
  • 运营商匹配数据:识别用户网络运营商(电信/联通/移动),优先选择同运营商节点,避免跨运营商网络拥堵
  • 节点健康状态:每 30 秒检测节点服务状态,实时监控 CPU 使用率、带宽利用率、连接数、丢包率、响应延迟,异常节点自动隔离
  • 资源缓存状态:查询用户请求的资源是否已缓存至候选节点,优先选择缓存命中节点,减少回源延迟

3.4 主流调度算法

GSLB 基于采集的多维数据,通过智能算法计算候选节点的综合得分,选择得分最高的边缘节点 IP 返回给用户。主流调度算法包括:

算法 原理 适用场景
加权轮询 按节点带宽/性能分配权重,高性能节点承担更多请求 节点性能差异较大的场景
最少连接 优先分配至当前连接数最少的节点 长连接业务(如 WebSocket)
IP 哈希 根据用户 IP 计算哈希值,固定分配至同一节点 需要会话保持的业务
延迟优先 主动探测节点到用户的实时延迟,选择延迟最低节点 对响应时间敏感的业务

此外,GSLB 还具备关键的故障切换能力:一旦发现某节点负载达到阈值或遭受攻击,GSLB 可在几十毫秒内将后续 DNS 请求解析到健康节点,保障服务连续性。

四、缓存系统——代理缓存的运行机制

4.1 分层缓存架构

CDN 的缓存系统采用多级架构,通常分为三层:

用户请求 → 边缘节点(L1 缓存) → 区域中心节点(L2 缓存) → 源站
↓ 命中直接返回 ↓ 命中直接返回 ↓ 最终回源
  • 边缘节点(Edge Node):部署在各城市、各运营商机房,是距离用户最近的缓存服务器,直接面向用户响应请求。存储热点内容(如图片、JS/CSS 文件),TTL 通常设为 5–30 分钟。这是 CDN 的“最后一公里”,是决定用户访问速度的核心环节
  • 区域中心节点(Region Node):部署在骨干网核心机房,汇聚多个边缘节点的请求,存储次热点内容,TTL 延长至数小时。承担“缓存中转、资源同步、流量汇聚”的作用,减少边缘节点直接回源的带宽消耗
  • 源站(Origin Server):存放全量内容的原始服务器,仅在边缘节点和区域节点均未命中时才触发回源

这种分层设计使得 80% 以上的用户请求可在边缘节点直接响应,大幅降低了骨干网压力和源站负载。

4.2 缓存代理的技术实现

CDN 的边缘节点本质上就是一台缓存代理服务器。在开源方案中,最常用的技术栈是 Squid 和 Nginx。

Squid 作为经典的代理缓存软件,天然具备以下适合构建 CDN 的特性:多级缓存体系(内存缓存 + 磁盘缓存),支持父缓存(Parent Cache)和同级缓存(Sibling Cache)的层级结构;智能缓存替换算法(如 LRU、LFU);基于 ICP(Internet Cache Protocol)协议实现节点间通信——当用户请求到达边缘节点时,若本地无缓存,会通过 ICP 查询上游节点是否存在副本,避免不必要的回源。

Nginx 则作为高性能反向代理服务器,凭借其事件驱动架构(epoll 模型)可高效处理并发请求,单台服务器即可承载数万连接,常被用作 CDN 边缘节点的核心组件。在 Squid 集群前部署 Nginx 做七层负载均衡也是一种常见方案。

4.3 缓存策略与更新机制

缓存系统的核心在于“存什么、存多久、怎么更新”。

缓存策略方面:对静态资源(图片、JS、CSS)设置较长 TTL(如 24 小时),对动态内容(API 响应)设置短 TTL(如 1 分钟);通过 URL、请求头等组合生成唯一缓存键,区分不同版本资源;利用预取技术根据用户行为分析模型提前将可能被访问的内容推送至边缘节点。

缓存更新方面主要有三种机制:主动刷新——源站推送更新通知,CDN 节点立即清除旧缓存;被动刷新——用户请求触发缓存检查,若内容过期则回源获取新版本;版本号控制——在 URL 中嵌入版本号(如 style.css?v=2),确保内容变更后 URL 自然变化,从而“绕过”旧缓存。

缓存淘汰方面:采用 LRU-K 算法管理缓存替换,热点内容存储在 SSD 高速缓存层,冷门内容下沉至 HDD 存储层,实现存储成本与访问性能的平衡。

五、总结

CDN 的高效运转依赖两大核心机制的协同配合:全局负载均衡(GSLB) 作为指挥中枢,通过 DNS 智能解析将用户请求导向最优边缘节点——其最常见的实现方式就是基于 DNS 的负载均衡,通过 CNAME 别名、权威 DNS 接管或代理 DNS 三种方式嵌入 DNS 解析链路中,结合地理位置、运营商、节点健康度等多维数据进行智能决策;缓存系统则作为执行层,以分层架构(边缘→区域→源站)部署缓存代理服务器(Squid/Nginx),通过精细的缓存策略与更新机制,让绝大多数请求在离用户最近的地方直接响应。

两者的结合使 CDN 既能“指对路”,又能“供得快”,从而共同实现高效、稳定、低延迟的内容分发服务——将用户访问延迟降低 50%–80%,带宽成本节约 30%–60%。


本文梳理了 CDN 运行机制中 GSLB 和缓存系统两大核心组件的技术原理与实现方式,希望能帮助读者建立起对 CDN 工作机制的系统认知。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐