外观
本地负载均衡功能说明 ⚖️
概述
wueasy-gateway 现在支持本地负载均衡功能,可以在多个后端服务实例之间分发请求,提供高可用性和负载分散。
功能特性
- 多种负载均衡策略:支持轮询(round_robin)、随机(random)、加权轮询(weighted_round_robin)
- 健康检查:自动检测后端服务实例的健康状态,自动剔除不健康实例
- 配置灵活:支持不同服务使用不同的负载均衡策略
- 无缝集成:与现有的nacos服务发现功能兼容,优先使用本地负载均衡
配置说明
基本配置
在 config.yaml
文件的 gateway
部分添加 loadbalancer
配置:
yaml
gateway:
loadbalancer:
enabled: true # 启用负载均衡
connection-timeout: 5s # 连接超时时间
check-interval: 30s # 健康检查间隔
services:
- id: web-feign # 服务ID
uris:
- 127.0.0.1:8082 # 服务节点1
- 127.0.0.1:8083 # 服务节点2
strategy: round_robin # 负载均衡策略
- id: api-service # 另一个服务
uris:
- 192.168.1.100:8080 # 服务节点1
- 192.168.1.101:8080 # 服务节点2
strategy: weighted_round_robin # 加权轮询策略
weights: [3, 2] # 对应的权重
配置参数详解
全局配置
enabled
: 是否启用负载均衡功能connection-timeout
: 健康检查连接超时时间(支持格式: "5s", "1000ms", "1m"等)check-interval
: 健康检查间隔时间(支持格式: "30s", "1m", "500ms"等),设置为空则禁用健康检查
时间格式说明:
ns
- 纳秒us
或µs
- 微秒ms
- 毫秒s
- 秒m
- 分钟h
- 小时
示例: "300ms"
, "1.5s"
, "2m45s"
, "1h30m"
services
: 服务列表配置
服务配置
id
: 服务唯一标识符,需要与路由配置中的服务名匹配uris
: 后端服务实例地址列表,格式为host:port
strategy
: 负载均衡策略,可选值:round_robin
: 轮询(默认)random
: 随机weighted_round_robin
: 加权轮询
weights
: 权重配置(仅当策略为weighted_round_robin
时使用)
路由配置
在路由配置中使用 lb://
前缀来启用负载均衡:
yaml
gateway:
routes:
- id: demo
uri: lb://web-feign # 使用负载均衡,web-feign对应服务ID
predicates:
- Path=/demo/**
- Method=GET,POST
filters:
- StripPrefix=1
负载均衡策略
1. 轮询 (round_robin)
按顺序轮流选择后端实例,每个实例被选中的概率相等。
yaml
strategy: round_robin
2. 随机 (random)
随机选择后端实例。
yaml
strategy: random
3. 加权轮询 (weighted_round_robin)
根据配置的权重比例选择后端实例,权重越高被选中的概率越大。
yaml
strategy: weighted_round_robin
weights: [3, 2, 1] # 对应uris的权重,比例为3:2:1
健康检查
负载均衡器会定期对后端服务实例进行健康检查:
- 检查方式: 向每个实例的地址和端口建立TCP连接
- 判断标准: 能够成功建立TCP连接视为健康,连接失败视为不健康
- 启动检查: 负载均衡器启动后会立即执行一次健康检查,无需等待第一个检查间隔
- 失败处理: 不健康的实例会被自动从负载均衡池中移除
- 恢复机制: 实例恢复健康后会自动重新加入负载均衡池
- 优势: TCP检查比HTTP检查更快速、更通用,不依赖特定的健康检查端点
工作流程
- 请求到达: 网关接收到请求
- 路由匹配: 根据路由规则匹配到对应的服务
- 负载均衡: 如果URI以
lb://
开头且启用了负载均衡:- 首先尝试从本地负载均衡器获取实例
- 如果本地负载均衡器没有配置该服务,则回退到nacos服务发现
- 请求转发: 将请求转发到选中的后端实例
监控和日志
负载均衡器的运行状态会记录在日志中:
- 服务实例选择过程
- 健康检查结果
- 负载均衡器启动和关闭状态
最佳实践
- 合理设置健康检查间隔: 过短会增加系统负载,过长会影响故障检测速度
- 权重配置: 根据后端实例的实际处理能力设置权重
- 监控日志: 定期检查负载均衡器的运行日志,及时发现问题
- 备用方案: 保持nacos服务发现作为备用方案
示例配置
完整的配置示例:
yaml
gateway:
routes:
- id: user-service
uri: lb://user-api
predicates:
- Path=/api/user/**
filters:
- StripPrefix=2
- id: order-service
uri: lb://order-api
predicates:
- Path=/api/order/**
filters:
- StripPrefix=2
loadbalancer:
enabled: true
connection-timeout: 5s
check-interval: 30s
services:
- id: user-api
uris:
- 192.168.1.10:8080
- 192.168.1.11:8080
- 192.168.1.12:8080
strategy: round_robin
- id: order-api
uris:
- 192.168.1.20:8080
- 192.168.1.21:8080
strategy: weighted_round_robin
weights: [3, 2]
注意事项
- 健康检查使用TCP连接方式,确保后端服务的端口可以正常访问
- 负载均衡器会在网关启动时自动启动,在网关关闭时自动停止
- 配置更改需要重启网关才能生效
- 本地负载均衡与nacos服务发现可以同时使用,本地负载均衡优先级更高
- TCP健康检查比HTTP检查更轻量级,对后端服务压力更小