拓冰建站拓冰建站
首页 / 资讯中心 / 正文

客户端负载均衡 vs 服务端负载均衡

核心定义客户端负载均衡负载均衡逻辑跑在调用方客户端进程内部。调用者本地维护服务实例清单自己算算法选节点直接请求目标服务。代表Spring Cloud LoadBalancer、Ribbon。服务端负载均衡有一个独立的中间代理服务器所有请求先打到代理由代理做算法转发到后端业务实例。代表Nginx、Gateway、F5 硬件负载。一、完整流程对比 客户端负载均衡LoadBalancer服务 A 调用服务 B服务 A 启动 / 定时从注册中心 (Nacos/Eureka) 拉取服务 B 所有实例列表缓存到服务 A 本地内存。服务 A 内部的负载均衡组件本地执行算法选出一个 B 实例 IP:Port。服务 A 直接发起 HTTP 请求访问选中的 B 实例不经过中间代理。调用方A ──(直连)── B1 └──(直连)── B2 服务端负载均衡Nginx/Spring Cloud Gateway客户端不知道后端真实实例只知道代理地址。请求先发给代理服务器。代理执行负载均衡算法挑选后端实例转发请求。后端实例返回响应再经由代理返回给客户端。客户端 ── Nginx/Gateway ── B1 └─ B2二、关键维度对比表表格对比项客户端负载均衡服务端负载均衡LB 逻辑位置调用者应用进程内部独立代理服务独立进程请求链路客户端直连业务服务无中间转发请求经过代理多一层转发实例列表来源注册中心 (Nacos)缓存在调用方本地代理配置 / 注册中心同步到代理节点网络开销少一次网络 IO多一次代理转发多一轮网络 IO性能损耗几乎无额外转发损耗代理会消耗 CPU / 内存大流量成为瓶颈跨语言绑定语言 SDKJava 用 LoadBalancer其他语言要自己实现一套完全语言无关任意客户端都可以访问代理部署成本无额外部署嵌入业务服务需要单独部署、维护代理集群要做代理本身高可用故障点各个调用方独立一个调用方故障不影响别人代理是单点风险必须集群化高可用适合场景微服务内部服务之间互相调用服务间 RPC/HTTP 调用网关入口外部客户端访问内部微服务统一限流、鉴权、SSL代表组件Spring Cloud LoadBalancer、RibbonNginx、Spring Cloud Gateway、F5、HAProxy三、优缺点拆解✅ 客户端负载均衡优点没有中间代理转发性能好延迟更低。无需额外部署中间件业务进程自带能力。每个调用方独立做负载均衡压力分散不会出现代理瓶颈。可以感知服务实例实时状态和注册中心联动。缺点和语言、SDK 强绑定Go/Python 客户端不能直接复用 Java 的 LoadBalancer 逻辑每个语言都要实现一遍负载均衡逻辑。每个服务实例都要缓存服务列表内存占用分散多实例场景每个节点都要维护实例清单。策略变更需要重启应用修改负载均衡策略、权重需要发布调用方服务。无法统一做全局鉴权、限流、SSL 解密每个服务都要自己处理。✅ 服务端负载均衡优点完全语言无关浏览器、APP、各种语言后端都可以接入。统一入口在代理层统一做鉴权、限流、熔断、SSL、路由、灰度发布。策略集中管理修改权重、路由规则只改代理不需要改动业务服务。缺点多一层转发增加网络延迟。代理本身会成为性能瓶颈高并发场景需要代理集群。代理集群需要独立运维增加运维成本。代理和后端服务之间也需要做健康检查。四、微服务中两者怎么搭配使用生产标准架构实际 Spring Cloud 微服务两个都会用各司其职外部请求 → Spring Cloud Gateway服务端负载均衡浏览器、APP 的请求先到网关网关做路由、鉴权网关内部也集成 LoadBalancer。微服务内部互相调用 → Spring Cloud LoadBalancer客户端负载均衡比如订单服务调用用户服务服务之间内部走客户端负载均衡直连不走网关转发。APP浏览器 → Gateway(服务端LB) → 订单服务 ↓客户端LoadBalancer直连 用户服务 / 支付服务❌ 错误做法微服务内部服务调用全部走网关转发会造成网关巨大压力多一层不必要网络开销。五、常见面试题Q为什么 Spring Cloud 用客户端负载均衡微服务内部大量服务互相调用如果全部走网关网关压力巨大。客户端负载均衡把选实例逻辑分散到各个调用方分散压力内部直连性能更高。QGateway 本身是服务端负载均衡为什么 Gateway 里面还要引入 LoadBalancerGateway 是服务端代理但是 Gateway 本身不知道后端实例地址需要通过 LoadBalancer 从注册中心拿到实例列表再转发请求。Gateway 是服务端代理角色内部底层依赖客户端负载均衡组件获取实例。Q客户端负载均衡能不能做灰度可以但是需要自己扩展 LoadBalancer而网关服务端 LB做灰度更简单集中配置即可。QNginx 能做微服务内部调用的负载均衡吗可以但不推荐。微服务实例动态上下线Nginx 配置文件需要不断更新很难对接 Nacos 注册中心。适合做最外层入口不适合做服务之间内部调用。补充两个负载均衡的健康检查区别客户端 LBLoadBalancer每个调用方本地感知实例也可以开启健康检查每个调用方各自判断实例是否存活。服务端 LB (Nginx/Gateway)代理节点统一做后端健康检查所有客户端共用一套健康状态。Nginx / Gateway /LoadBalancer 速记面试金句Nginx 适合做流量最外层不适合微服务内部服务发现。2. Spring Cloud Gateway面试常问Gateway 为什么要引入 loadbalancer 依赖 答Gateway 要根据服务名从注册中心拿到真实实例 IP负载均衡选择实例才能转发请求。Gateway 是网关角色LoadBalancer 是它内部获取实例的工具。3. Spring Cloud LoadBalancer生产标准架构必背前端/App → NginxSSL、静态资源 → Spring Cloud Gateway鉴权、灰度路由 ↓ 业务微服务集群 ↓内部LoadBalancer客户端负载均衡直连调用不走网关 其他微服务高频面试问答Q1Gateway 和 LoadBalancer 区别Gateway 是网关独立服务接收外部请求属于服务端 LB LoadBalancer 是 SDK 组件跑在每个微服务进程里面做服务间调用选实例属于客户端 LB Gateway 内部底层就是使用 LoadBalancer 拿到后端实例。Q2Nginx 和 Gateway 怎么选Nginx 做最外层接入、SSL、大并发连接Gateway 做业务层面网关鉴权、灰度、动态路由对接注册中心。二者经常搭配使用。Q3为什么微服务内部调用不走网关内部调用量很大如果全部走网关网关会成为瓶颈多一层转发增加网络开销。内部调用使用客户端负载均衡直连性能更高。Q4Ribbon 和 LoadBalancer 区别Ribbon Netflix 开源项目已经停止维护Spring Cloud 2020 版本移除 Ribbon替换为 Spring Cloud LoadBalancer。LoadBalancer 原生支持响应式 WebClient。Q5客户端负载均衡优缺点优点无中间代理性能好压力分散 缺点SDK 绑定语言策略修改需要重启服务每个服务都维护实例缓存。Q6服务端负载均衡优缺点优点语言无关集中管控规则统一鉴权限流灰度 缺点多一层转发代理本身需要做高可用存在瓶颈风险。易踩坑点总结Nginx四层 / 七层传统反向代理服务端 LBSpring Cloud Gateway微服务网关服务端 LB内部依赖 LoadBalancerSpring Cloud LoadBalancer客户端负载均衡服务间调用选实例总览对比表组件类型层级核心定位是否对接注册中心使用位置Nginx服务端负载均衡七层 HTTP 四层 TCP外网入口反向代理、静态资源、SSL、限流不原生对接 Nacos/Eureka需要第三方脚本最外层客户端→NginxSpring Cloud Gateway服务端负载均衡微服务网关七层 WebFlux微服务统一网关路由、鉴权、灰度、限流✅ 原生集成 LoadBalancer 对接注册中心外网 / 前端 → Gateway → 微服务Spring Cloud LoadBalancer客户端负载均衡SDK 内置无独立进程微服务内部服务之间调用选择实例✅ 直接对接注册中心微服务进程内部订单服务调用用户服务核心要点1. Nginx属于服务端负载均衡独立部署反向代理。擅长SSL 解密、静态资源、高并发接入、四层 TCP 代理。短板不能原生监听 Nacos 服务实例动态变化实例扩缩容要改配置文件重载。适用最外层入口不适合做微服务内部服务调用。服务端负载均衡微服务网关基于 WebFlux 响应式。接收前端 / 外部请求做统一路由、鉴权、限流、灰度、跨域。本身不知道后端实例底层依赖 Spring Cloud LoadBalancer从 Nacos 获取服务实例列表再转发请求。注意Gateway 只是代理服务 A 调用服务 B 不要经过 Gateway会增加网关压力。不能用于服务内部 RPC 调用只处理外部进来的流量。客户端负载均衡嵌入业务进程没有独立服务替代 Ribbon。作用微服务内部调用RestTemplate / WebClient / Feign本地从注册中心拉取实例列表本地算法选实例直连目标服务。内置策略轮询、随机没有权重、灰度需要自定义扩展。场景订单服务调用用户服务这种服务内部互相调用。注解LoadBalanced给 RestTemplate/WebClient 开启负载均衡能力。Nginx最外层处理 https卸载 SSL。Gateway微服务网关业务流量入口。LoadBalancer微服务内部调用客户端负载均衡直连。OpenFeign 新版必须手动引入spring‑cloud‑starter‑loadbalancer否则报UnknownHostException。LoadBalancerClient配置类不能被 ComponentScan 全局扫描否则全局策略被覆盖。LoadBalancer 原生不支持权重需要自己扩展实现。开启重试注意接口幂等性POST 默认不重试。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门