本节摘要:接入层是用户请求进系统的第一道关卡,它负责把流量分发到后端、挡住异常请求、加速静态资源。本节讲接入层的三大组件——负载均衡(分发策略)、CDN(静态加速)、WAF(安全防护),以及接入层怎么做第一道限流。重点理解:接入层不只是转发,它是系统的门面和第一道防线,配好了能挡掉大量后端压力。
阅读完本节,你应当能够:
假设你的应用部署了 10 台服务器,用户请求来了怎么分给这 10 台?最直觉的做法是轮流分(第 1 个给 A、第 2 个给 B……),但这只是最朴素的轮询。真实场景里,10 台服务器可能配置不同(有的强有的弱),用户可能遍布全国(离不同服务器远近不同),有的请求是静态资源(图片、JS),有的要动态计算。一刀切的轮询显然不合适。
这就是接入层要解决的问题。它站在用户和后端服务器之间,根据策略把请求分发到合适的后端,同时做加速和安全防护。一个配置得当的接入层,能让后端服务器的利用率最大化、用户的访问速度最快、异常流量被挡在门外。配置不当,要么某些服务器过载、某些闲置,要么用户绕远路访问慢,要么异常请求穿透到后端把系统打挂。
接入层是高并发系统的门面,也是第一道防线。理解它怎么工作,是理解整个高并发架构的起点。
负载均衡(Load Balancing)是接入层的核心功能,它把进入的请求按某种策略分发到多台后端服务器。常见的分发策略有这么几种。
轮询(Round Robin):依次把请求分给每台服务器,循环往复。最简单,假设所有服务器能力相同。适合服务器配置一致的场景。
加权轮询(Weighted Round Robin):给每台服务器一个权重,按权重比例分发。配置强的服务器权重高,分到的请求多。适合服务器配置不一致的场景。
最小连接(Least Connections):把请求分给当前连接数最少的服务器。它动态感知服务器负载,比静态权重更智能。适合请求处理时间差异大的场景。
一致性哈希(Consistent Hashing):根据请求的某个标识(如用户 ID、会话 ID)算哈希,映射到固定服务器。同一个用户的请求总落到同一台服务器。适合需要会话保持(Session Sticky)的场景。
| 策略 | 分发依据 | 优点 | 适用场景 |
|---|---|---|---|
| 轮询 | 顺序 | 简单 | 服务器配置一致 |
| 加权轮询 | 静态权重 | 适配异构配置 | 配置不一致 |
| 最小连接 | 实时连接数 | 动态感知负载 | 请求耗时差异大 |
| 一致性哈希 | 请求标识哈希 | 会话保持 | 需要会话粘性 |
还有一个重要区分是四层负载均衡和七层负载均衡。四层(传输层,基于 IP 和端口)只看网络层信息,分发速度快,但不理解应用协议,典型代表是 LVS。七层(应用层,基于 HTTP 头、URL、Cookie)能理解应用协议,分发更灵活(按 URL 路由到不同服务),但开销大,典型代表是 Nginx。实际架构常是两层叠加:四层做第一级分发(快),七层做第二级路由(灵活)。
CDN(Content Delivery Network,内容分发网络)解决的是静态资源(图片、视频、JS、CSS)的访问速度问题。它的原理是把静态资源缓存在离用户最近的边缘节点,用户请求时从最近的节点取,不用每次都回源到中心服务器。
CDN 的价值有两个。一是加速:用户到边缘节点的物理距离近,网络延迟低。二是减压:静态请求被边缘节点挡掉了,不会涌向后端服务器,后端只处理动态请求。对一个图片密集的网站,开 CDN 能把后端流量降一个数量级。
CDN 的关键配置是缓存策略——哪些资源缓存、缓存多久、怎么更新。配得好,命中率(从边缘节点直接返回的比例)能到 95% 以上;配得差,大量请求回源,CDN 形同虚设。静态资源一般配长缓存(几天到几个月),更新时用文件名带版本号(如 app.v2.js)强制刷新。
WAF(Web Application Firewall,Web 应用防火墙)在接入层做安全防护,挡住恶意请求——SQL 注入、XSS 攻击、恶意爬虫、CC 攻击(用大量请求耗尽资源)。
WAF 的价值在高并发场景特别突出。一次 CC 攻击,几万个请求秒级涌入,后端扛不住;WAF 在入口识别出这些是恶意请求(根据频率、特征、行为),直接拦截,后端根本感知不到。这比让后端自己防高效得多——在门口拦贼,比让贼进屋再抓省力。
除了分发和安全,接入层还常做第一道限流。在请求进入后端之前,先在接入层卡一道:总 QPS 超过某个阈值,多余的请求直接拒绝,不让它们进入后端。
接入层限流的好处是“早拒绝早省事”——恶意或过量请求在门口就挡掉,不占用后端任何资源。它通常是粗粒度的(按总 QPS 或按 IP),细粒度的限流(按用户、按业务)放在应用层做。下一节讲限流算法时会详细展开。
实际架构里,负载均衡常是分层的:最外层 DNS 做地理级分发(把不同地区用户引到最近的机房),机房入口四层负载均衡做服务器组分发(快),组内七层负载均衡做应用路由(灵活)。三层各司其职,共同把请求送到合适的应用实例。
这种分层不是为了复杂而复杂,而是每一层解决的问题不同。DNS 解决地理距离,四层解决高效分发,七层解决应用路由。少一层,某个维度就照顾不到。
负载均衡有个基本功能不能少:健康检查。它定期探测后端服务器是否存活,一旦某台挂了,立即把它从分发列表里剔除,请求不再分给它。没有健康检查,一台服务器死了,负载均衡还在往它分发请求,这些请求全失败,用户体验崩塌。
⚠️ 常见坑:健康检查的探测接口和真实业务接口不是一回事。探测接口返回正常,不代表业务接口能正常工作(可能依赖的数据库挂了)。健康检查要探测能反映真实健康状态的接口,最好是个能连带检查关键依赖的综合健康端点。
接入层配得再好,如果不根据实际流量调,就是摆设。CDN 缓存策略要按命中率调,WAF 规则要按攻击特征更新,限流阈值要按容量测试定。这些都需要可观测数据支撑——看 CDN 命中率、WAF 拦截量、限流触发频率,据此优化配置。
💡 关键直觉:接入层的价值在于“挡在前面”,把大量本不该到后端的请求(静态、恶意、超量)挡掉。后端因此能专注于处理真正需要它处理的动态业务请求。一个配得好的接入层,能让后端服务器数量减半,这是最划算的优化。
下一节我们深入讲限流熔断降级三板斧,看流量治理的核心手段怎么落地。
接入层的限流、熔断、降级、排队不是四个孤立的开关,而是有明确的叠加次序,理解这个次序才能组合出有效的防护。排队在最前:把瞬时洪峰削成平稳流入,牺牲少量延迟换取系统稳定,对用户无感。限流在第二道:超过容量的请求快速拒绝,保护后端不过载——它的价值在于"拒绝得快",与其让请求排队到超时,不如立刻返回友好提示。熔断在第三道:当某个下游已经故障,后续调用直接失败跳过,不再白白消耗线程资源去撞墙,故障恢复后逐步放行试探。降级是最后的兜底:主动砍掉非核心功能,把省下的资源留给主链路,页面少个推荐位用户能忍,下单失败不能忍。
四道手段的触发条件要用不同的信号:排队看队列长度、限流看吞吐水位、熔断看下游错误率、降级看整体容量裕度。实践中最常见的错误是用同一个指标驱动全部手段,结果要么全不触发、要么连环触发互相放大。另外提醒配置的默认值问题:所有防护手段上线时必须带"手动开关",自动策略失灵时能一键切换到人工模式——防护系统本身也会故障,这个备份是最后的保险。

这张图的读法是从左到右:越靠左的手段越温和、越靠右越激烈,防护强度递进。设计接入层时按这个次序逐道部署,每道上线后观察一个完整大促周期再加下一道,比一次全上更稳——出问题时你才知道是哪一道在起作用。
再补充接入层选型的一个横评视角:自建网关、云厂商网关、服务网格边车三种形态的取舍。自建网关可控性最强、插件随心,但开发和运维投入大,适合有平台团队的组织;云网关开箱即用、与云生态深度集成,代价是插件能力和迁移自由度受限;边车模式把治理下沉到服务旁,语言无关、粒度细,但每个实例的边车增加了资源开销和排障链路长度。中小团队首选云网关,规模上来后再评估自建或混合——治理能力的自建时机,同样是"应急成本超过采购成本"的判断。