《SRE:Google 运维解密》读书笔记20: 前端服务器的负载均衡 - 当“鸡蛋”不再放在一个篮子里
用户流量负载均衡系统的核心任务,是决定数据中心中的哪一台机器来处理某个请求。理想情况下,用户流量应该最优地分布于多条网络链路上、多个数据中心中以及多台服务器上。因素说明逻辑层级是在全局层面(跨数据中心)还是在局部层面(数据中心内部)技术层面是基于硬件的负载均衡还是基于软件的用户流量的天然属性请求的类型决定了优化目标(延迟优先还是吞吐量优先)前端负载均衡 = GSLB负责“宏观选址”(选数据中心)+
作者: andylin02
学习章节:第19章 前端服务器的负载均衡(Front-end Load Balancing)
关键词:GSLB、DNS负载均衡、VIP负载均衡、反向代理、GFE、Anycast、包封装、一致性哈希、跛脚鸭模式
一、引言:当“鸡蛋”不再放在一个篮子里
在上一章,我们学习了SRE如何通过内部软件开发将运维知识固化为可复用的产品和平台。而本章探讨的负载均衡,正是Google SRE软件工程成果中最具代表性的领域之一。
“运维大型系统时,将所有鸡蛋放在一个篮子里是引来灾难的最好办法。”——王小波
负载均衡是大型分布式系统应对容灾、优化资源利用率的核心手段。Google之所以能在全球范围提供低延迟、高可用的服务,其基础设施层面的负载均衡系统功不可没。本章将揭示Google如何在全球层面、区域层面和数据中心内部多个层次上,将用户流量精准地引导到“最合适”的服务器上。
核心观点:前端负载均衡的精髓在于分层协作。没有单一的负载均衡器能解决所有问题,Google通过GSLB(全局)、VIP(区域)和GFE(内部)三个层次的分工,在不同层面使用不同技术,实现了全球规模的流量调度。
二、核心观点速览
| 维度 | 核心要点 |
|---|---|
| 负载均衡的目的 | 将用户流量最优地分布于多条网络链路、多个数据中心和多台服务器上 |
| “最优”的三要素 | ①逻辑层级(全局 vs 局部);②技术层面(硬件 vs 软件);③用户流量的天然属性 |
| 流量类型决定策略 | 搜索请求追求低延迟(发往最近的DC),视频上传追求高吞吐量(走带宽空闲链路) |
| Google三层负载均衡架构 | GSLB(全局/流量入口)→ VIP/GFE(区域/流量分发)→ 后端服务(内部/RPC) |
| DNS负载均衡的四大局限 | ①客户端行为不可控;②无法识别地理位置;③DNS缓存;④TTL限制 |
| VIP负载均衡技术演进 | 网络地址转换(NAT) → 直接服务器返回(DSR) → 包封装(IP-in-IP) |
| GFE的四大核心功能 | ①终结用户SSL连接;②执行反向代理;③健康检查与跛脚鸭模式;④维护持久会话 |
| GSLB的工作流程 | DNS请求 → GSLB决策(健康状态+地理+负载)→ 返回最优IP → 请求经GFE转发至后端 |
三、详细内容拆解
3.1 负载均衡的本质:什么是“最优”?
用户流量负载均衡系统的核心任务,是决定数据中心中的哪一台机器来处理某个请求。理想情况下,用户流量应该最优地分布于多条网络链路上、多个数据中心中以及多台服务器上。
然而,“最优”并没有唯一的标准答案,它严重依赖于以下几个因素:
| 因素 | 说明 |
|---|---|
| 逻辑层级 | 是在全局层面(跨数据中心)还是在局部层面(数据中心内部) |
| 技术层面 | 是基于硬件的负载均衡还是基于软件的 |
| 用户流量的天然属性 | 请求的类型决定了优化目标(延迟优先还是吞吐量优先) |
案例:搜索请求 vs 视频上传请求
书中通过一个极具说服力的对比,揭示了流量类型如何决定负载均衡策略:
-
搜索请求:用户想要极快地获取结果,最重要的变量是延迟(latency)。因此,搜索请求将会被发往最近的、可用的数据中心,评价条件是数据包往返时间(RTT)。
-
视频上传请求:用户已预期请求会花费一定时间,但希望请求能够一次成功,最重要的变量是吞吐量(throughput)。因此,视频上传流可能会走一条目前带宽没有被占满的链路来最大化吞吐量,同时也许会在一定程度上牺牲延迟。
在局部层面(数据中心内部),我们通常假设同一个物理建筑物内的所有服务器对用户来说都是等距的,因此“最优”分配往往侧重于优化资源利用率,避免某个服务器负载过高。
3.2 Google的三层负载均衡架构
Google在多个层面上使用负载均衡策略,形成了一个从全球到数据中心的完整体系。

下表总结了Google三层负载均衡架构中各层的关键信息:
| 层次 | 核心组件 | 主要功能 | 技术要点 |
|---|---|---|---|
| 第一层:全局流量入口 | GSLB | 根据用户地理位置、服务健康状态和负载,决定返回哪个数据中心的IP地址 | 将用户引导至最近的数据中心,实现跨地域容灾 |
| 第二层:区域/数据中心内部 | VIP + GFE | 终结SSL连接、执行反向代理、进行健康检查和流量分发 | 使用Anycast IP在全球发布;GFE(Google Front End)是核心七层反向代理 |
| 第三层:后端服务 | BNS | 在数据中心内部将请求精确转发到具体的后端服务器实例 | BNS是Google的Borg名称解析系统,负责服务发现 |
3.3 第一层:GSLB与DNS负载均衡
3.3.1 为什么第一层选择DNS?
在客户端发送HTTP请求之前,必须先通过DNS查询获取服务器的IP地址。这就为负载均衡提供了一个天然的切入点:在DNS回复中控制返回哪个IP地址。
3.3.2 DNS负载均衡的四大局限
虽然DNS负载均衡实现简单,但存在以下主要问题:
| 局限 | 说明 | 后果 |
|---|---|---|
| 对客户端行为约束力弱 | DNS回复中提供多个A记录时,客户端会随机选择一个IP,导致流量均匀分布,无法按需分配 | 无法实现“最近的优先”等智能路由策略 |
| 无法识别“最近”地址 | 权威DNS服务器不知道客户端的地理位置,无法在回复中直接指定最近的服务器 | 可能将用户引导到地理上更远的数据中心 |
| DNS缓存问题 | 权威DNS服务器无法主动清除中间DNS服务器和客户端的缓存 | 变更生效需要等待TTL过期 |
| TTL限制 | DNS记录的TTL值不能设置得太低,否则会增加DNS服务器的查询压力 | 限制了流量调度的灵活性 |
3.3.3 Google的解决方案:GSLB
为了克服DNS负载均衡的局限性,Google引入了GSLB(Global Server Load Balancing,全局服务器负载均衡)系统。
GSLB的核心工作流程:
-
用户向DNS服务器请求某个域名的IP地址。
-
DNS服务器将请求转交给GSLB系统。
-
GSLB根据全球流量负载信息、用户地理位置、各数据中心健康状态等多种信号,决定使用哪个IP地址回复用户。
-
GSLB返回一个全局任何一个边缘网络都可以提供的IP地址(即Anycast VIP)。
GSLB支持基于地理位置和延迟的路由,同时执行健康检查,确保用户只被导向健康的数据中心。它使用Anycast IP,使得全球用户访问同一个IP地址时,网络路由会自动将流量导向拓扑上最近的数据中心。
3.4 第二层:VIP负载均衡与GFE
用户通过GSLB获得一个Anycast VIP地址后,会向该VIP地址发起请求。这个请求最终会到达Google的网络边缘,并由Google Front End(GFE)处理。
3.4.1 VIP负载均衡的技术演进
虚拟IP(VIP)负载均衡的实现技术经历了以下几个阶段的演进:
| 技术方案 | 工作原理 | 局限性 |
|---|---|---|
| 网络地址转换(NAT) | 负载均衡器收到请求后,修改数据包的目标IP地址,将其转发给后端服务器 | 在大规模场景下,负载均衡器本身成为瓶颈 |
| 直接服务器返回(DSR) | 请求包经过负载均衡器,响应包直接返回给客户端,绕过负载均衡器 | 对网络拓扑有特殊要求 |
| 包封装(IP-in-IP) | 将原始IP包封装在另一个IP包中,后端服务器解封装后处理 | 增加了包的尺寸,可能需要IP分片重组 |
Google当前采用的VIP负载均衡解决方案是包封装模式,这使其能够在大规模部署中保持高效。
3.4.2 一致性哈希算法
在VIP负载均衡中,当一个后端服务器故障时,传统的做法是将其从负载均衡池中移除。但这会导致大量连接中断,因为原本发往该服务器的请求现在会被重新分配到其他服务器。
Google的解决方案是使用一致性哈希算法。当一台服务器发生故障时,只有该服务器上的连接会被重新分配给其他服务器,而其他服务器的连接不受影响,从而将对用户体验的影响降到最低。
3.4.3 Google Front End(GFE)的核心功能
GFE是Google全球HTTP(S)负载均衡器的核心组件,位于Google的边缘网络中。它是一个七层反向代理,承担着至关重要的流量管理任务。
GFE的四大核心功能如下表所示:
| 功能 | 说明 | 价值 |
|---|---|---|
| 终结用户SSL连接 | 在靠近用户的位置(Google边缘网络)解密HTTPS流量 | 减少因SSL/TLS握手造成的网络往返次数,降低用户延迟 |
| 反向代理 | 接收用户的请求,根据配置文件找到对应的后端服务,将请求转发过去 | 将外部请求与内部服务隔离,提供统一入口 |
| 健康检查与“跛脚鸭”模式 | GSLB根据健康状态决定向哪些GFE发送流量;GFE在健康检查失败后不会立即断开,而是进入“跛脚鸭”状态 | 实现优雅下线,确保已建立的连接能正常完成,不中断用户服务 |
| 维护持久会话 | GFE为所有最近活动的后端维护持久连接(如长连接) | 减少后续请求的延迟,尤其是在使用SSL保护的情况下 |
“跛脚鸭”模式的优雅下线流程:

3.5 第三层:后端服务的内部负载均衡
当请求经过GFE转发后,它进入了Google内部的服务网络。这一层的负载均衡完全发生在数据中心内部,不涉及外部用户。
在这一层,请求可能需要经过多次跳转。以下是一个典型的搜索请求路径:
-
GFE向后端的前端服务器(Frontend Server)发起RPC请求。
-
前端服务器构建出具体查询的Protobuf请求。
-
前端服务器向GSLB发送请求,获取可用的后端服务器的BNS地址。
-
前端服务器将Protobuf请求发送给后端服务器(Backend Server)。
-
后端服务器查询数据库,获取结果。
BNS是Google的Borg名称解析系统,是一个发布任务的服务,用于在动态变化的生产环境中实现服务发现。
3.6 GSLB、GFE与BNS的协同工作流程
下图完整展示了用户请求从DNS查询到最终响应的全过程,体现了Google三层负载均衡架构的紧密协作:

3.7 本章的核心启示:分层分工,各司其职
Google前端负载均衡的精髓在于分层分工,各司其职:
-
GSLB负责“宏观决策”——决定把用户分配给哪个数据中心
-
GFE负责“流量分发”——在数据中心内部将请求转发给具体的服务
-
BNS负责“微观发现”——在动态环境中找到具体的服务实例
每一层使用最适合该层级的技术(GSLB使用DNS + 健康检查,GFE使用七层反向代理,内部使用RPC + 服务发现),通过明确的分工实现了全球规模的流量调度。
四、第19章知识点脑图总结

五、总结:一句话记住本章
前端负载均衡 = GSLB负责“宏观选址”(选数据中心)+ GFE负责“微观分发”(选后端服务),通过分层分工实现全球流量的最优调度。
| 关键点 | 一句话概括 |
|---|---|
| 负载均衡的目标 | 将流量最优分布于多条网络链路、多个数据中心和多台服务器 |
| 最优的三要素 | 逻辑层级、技术层面、流量属性,共同决定“最优”的定义 |
| 流量类型决定策略 | 搜索请求优先考虑延迟,视频上传优先考虑吞吐量 |
| DNS负载均衡的局限 | 客户端行为不可控、无法识别地理位置、DNS缓存、TTL限制 |
| GSLB的核心价值 | 基于地理位置和健康状态,在全局层面决定用户去哪个数据中心 |
| VIP技术演进 | 从NAT到DSR再到包封装,解决大规模部署瓶颈 |
| GFE四大功能 | SSL终结、反向代理、健康检查(跛脚鸭模式)、持久会话 |
| 三层架构启示 | 分层分工,不同层面使用不同技术,各司其职 |
行动建议:
-
本周内完成:审视当前系统的负载均衡策略,识别是否存在单层负载均衡导致的瓶颈
-
一个月内完成:评估DNS负载均衡的使用场景,考虑是否需要引入GSLB或类似方案(如基于地理位置的路由)
-
一个季度内完成:检查反向代理层(如Nginx/Envoy)的健康检查配置,确保支持“跛脚鸭”式的优雅下线机制
-
长期坚持:在设计负载均衡方案时,始终坚持“分层分工”原则,为每一层选择最适合的技术
六、高频考点自测
问题1:搜索请求和视频上传请求的负载均衡策略有何不同?为什么?
参考答案:搜索请求追求极低延迟,应被发往最近的可用数据中心,以RTT作为评价条件;视频上传请求追求高吞吐量,应走带宽空闲的链路,可牺牲一定延迟。这是因为两种请求的用户需求不同——搜索请求的用户关注响应速度,视频上传的用户关注上传能否一次成功。
问题2:DNS负载均衡存在哪些局限性?
参考答案:DNS负载均衡存在四大局限性:①对客户端行为的约束力很弱,客户端会随机选择IP,无法按需分配;②权威DNS服务器不知道客户端的地理位置,无法返回“最近”的地址;③权威DNS无法主动清除中间DNS服务器和客户端的缓存;④DNS记录的TTL不能设置得太低,否则会增加查询压力。
问题3:GSLB在Google负载均衡架构中扮演什么角色?
参考答案:GSLB(全球服务器负载均衡系统)是Google三层负载均衡架构的第一层。当DNS服务器收到域名解析请求时,会请求GSLB进行决策。GSLB根据用户地理位置、各数据中心健康状态、当前负载等多种信号,决定使用哪个数据中心的IP地址回复用户。GSLB使用Anycast IP,使全球用户访问同一个IP地址时,网络路由会自动将流量导向拓扑上最近的数据中心。
问题4:Google Front End(GFE)的核心功能有哪些?
参考答案:GFE的核心功能有四个:①终结用户SSL连接,在靠近用户的位置解密HTTPS流量,降低延迟;②执行反向代理,接收用户请求并转发给后端服务;③进行健康检查,支持“跛脚鸭”模式(健康检查失败后不立即断开,而是等待现有连接完成);④维护持久会话,为最近活动的后端保持长连接,降低后续请求延迟。
问题5:Google的负载均衡为什么需要三层架构?
参考答案:Google之所以需要三层架构,是因为没有单一的负载均衡器能够解决所有问题。不同层级面临不同的技术挑战:第一层(GSLB)需要在全球层面做“宏观选址”,决定用户去哪个数据中心,最适合使用DNS + Anycast技术;第二层(VIP+GFE)需要在区域/数据中心层面做流量分发,使用七层反向代理;第三层(后端服务)需要在数据中心内部做精确转发,使用RPC和服务发现。分层分工、各司其职,使得每一层都可以选择最适合该层需求的技术,共同实现全球规模的流量调度。
七、延伸阅读推荐
-
《Google SRE工作手册》第11章“负载均衡系统”:本章内容的官方扩展,包含GSLB与GFE的更多细节
-
《Google SRE工作手册》第20章“跛脚鸭模式”:本章提到的优雅下线机制的详细讨论
-
《Maglev: A Fast and Reliable Software Network Load Balancer》:Google数据中心的软件负载均衡器设计论文
-
《SRE Google运维解密》第20章“数据中心内部的负载均衡”:下一章将深入探讨数据中心内部的负载均衡算法
-
Google SRE官方书籍网站:https://sre.google
-
《SRE中文社区》:https://www.srenow.cn
学习下一章预告:第20章“数据中心内部的负载均衡”——当请求进入数据中心后,如何将流量进一步分发到具体的服务器上,涉及Maglev负载均衡器、一致性哈希、子集选择等核心技术。
本文为个人学习笔记,仅用于知识分享。如有错误,欢迎指正。
👍🏻 点赞 + 收藏 + 分享,让更多开发者看到这篇深度解析!❤️ 如果觉得有用,请给个赞支持一下作者!
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)