代理、负载均衡与 CDN 基础

单台服务器的处理能力总有上限,真实的互联网服务都建立在一套"分发"体系之上:代理负责转发、负载均衡负责分流、CDN 负责就近加速。三者是后端架构的高频话题,本文一次讲清原理与区别。

正向代理与反向代理

正向代理站在客户端一侧,代替客户端去访问目标服务器(如公司上网管控、科学访问外网资源)。目标服务器只能看到代理的 IP,看不到真正的客户端。

反向代理站在服务器一侧,对外表现为"真实服务",再把请求转发给内网的多台服务器(如 Nginx)。客户端只认识反向代理,并不知道背后是哪台机器在响应。

客户端 → 正向代理 → 目标服务器     (代理代表客户端,隐藏客户端)
客户端 → 反向代理 → 后端服务器集群 (代理代表服务器,隐藏后端)

反向代理的典型配置(Nginx,片段):

server {
    listen 80;
    location / {
        proxy_pass http://127.0.0.1:8080;   # 把请求转发给后端应用
        proxy_set_header X-Real-IP $remote_addr;   # 把真实客户端 IP 传给后端
    }
}

反向代理一鱼多吃:统一入口、隐藏后端、分摊流量、缓存静态资源、终结 TLS 证书等。

负载均衡:把流量分给多台机器

负载均衡(Load Balancing)按某种策略把请求分发给后端集群,让每台机器负载大致均衡,同时配合健康检查自动摘除故障节点。

常见算法思路适用场景
轮询 Round Robin依次轮流分发各后端能力相当时
加权轮询按权重比例分发机器配置不一致时
最少连接谁当前连接少就发给谁长连接、耗时差异大
IP Hash同一 IP 固定打到同一台需要会话保持

实现上分几个层次:DNS 轮询(最粗粒度)、四层 LB(LVS 等,转发 TCP/UDP)、七层 LB(Nginx、HAProxy,读懂 HTTP 再转发),以及云厂商的 SLB/ALB。共同前提是先做健康检查,把挂掉的节点剔除,才能谈高可用。

CDN:把内容搬到离用户最近的地方

CDN(内容分发网络)在各地部署大量边缘节点并缓存内容,用户请求时由调度系统把流量导向离自己最近、最快的节点,从而降低延迟、减轻源站压力。

一次典型访问流程:

  1. 用户请求 www.example.com/a.png,先向 DNS 查询。
  2. DNS 返回的是 CDN 调度后的边缘节点 IP(而非源站 IP)。
  3. 边缘节点有缓存就直接返回;没有则回源拉取并缓存,再返回给用户。
  4. 后续相同请求直接命中缓存,命中率越高,源站压力越小。

使用 CDN 的三个典型收益:

  • 静态资源(图片、JS、CSS、视频)加载明显变快;
  • 源站带宽与并发压力大幅下降;
  • 天然的 DDoS 抗打击与突发流量缓冲能力。

一张表分清三者

概念站在哪一侧核心目的代表产品
正向代理客户端侧代表客户端访问外网公司代理、VPN
反向代理服务器侧统一入口、转发请求Nginx
负载均衡服务器侧多台机器分摊流量LVS、Nginx、云 SLB
CDN边缘节点就近缓存加速Cloudflare、各大云 CDN

小结:正向代理替"用户"办事,反向代理替"服务器"接客,负载均衡让流量雨露均沾,CDN 让内容送货上门。四者本质都是"在数据通路上多加一跳",换来的却是安全、稳定与速度。

笔记加载中…