长期不定期更新补充。
定义
负载均衡(Load Balancing)是指将来自客户端的请求合理分发到多个服务器或服务节点,以提高系统性能、可用性与可靠性。
分工
前端不做负载均衡,前端只发请求,不知道请求去哪台服务器。
负载均衡拆成很多层,有分工。
层级 | 名称 | 示例 / 工具 | 说明 |
---|---|---|---|
DNS层 | DNS负载均衡 | DNS轮询(Round-Robin) | 多个 IP 轮流返回给客户端 |
网络层 | 四层负载均衡(L4) | LVS(Linux Virtual Server) | 基于 TCP/UDP,速度快但不看应用内容 |
应用层 | 七层负载均衡(L7) | Nginx、HAProxy、Traefik | 基于 HTTP,能根据路径、Header 分发 |
服务层 | 服务注册/发现 + 负载均衡 | Spring Cloud、Kubernetes、Consul | 微服务架构常见,结合服务治理 |
层级 | 是否后端负责 | 说明 |
---|---|---|
DNS 层 | ❌ 网络或运维层负责 | 把不同的请求分发到多个 IP 上,域名解析控制 |
四层负载均衡(LVS) | 后端/运维配合 | 基于 TCP/UDP,只看 IP+端口 |
七层负载均衡(Nginx) | 后端常负责 | 基于 HTTP 头、URL、Cookie 分发 |
微服务层(K8s / Spring Cloud) | 后端做 | 自动服务发现、调用路由控制 |
CDN(内容分发网络) | ❌ 第三方网络服务商做 | 靠近用户的边缘节点分发 |
实现
算法名称 | 原理简介 |
---|---|
轮询 | 按顺序一个一个分发 |
加权轮询 | 节点权重大,分发次数多 |
最少连接数 | 分发给当前连接最少的服务器 |
IP hash | 同一个 IP 总是打到同一个服务器(用于会话粘性) |
随机 | 随机分发(适合高并发短连接) |
- 静态网站/接口服务:使用 Nginx + upstream 做七层负载均衡
upstream backend {server 192.168.0.101;server 192.168.0.102;
}
server {location / {proxy_pass http://backend;}
}
- 微服务架构:使用 Ribbon、Feign 或 Gateway 内置的负载均衡器,(如 Spring Cloud)
- 容器化部署:使用 Service + kube-proxy + Ingress 自动实现服务发现和负载均衡(如 Kubernetes)