负载均衡架构
负载均衡架构
L4与L7负载均衡
L4负载均衡工作在传输层,基于IP和端口进行转发,性能高但灵活性有限。L7负载均衡工作在应用层,可解析HTTP头、URL等信息,支持更精细的路由策略。
# Nginx L7负载均衡配置
upstream backend {
server 10.0.0.1:8080 weight=5;
server 10.0.0.2:8080 weight=3;
server 10.0.0.3:8080 backup;
}
server {
listen 80;
location /api/ {
proxy_pass http://backend;
}
}
一致性哈希算法
一致性哈希将节点和请求映射到哈希环上,当节点增减时只影响相邻节点的数据迁移,大幅减少缓存失效问题。
public class ConsistentHash<T> {
private final TreeMap<Integer, T> ring = new TreeMap<>();
private final int virtualNodes = 150;
public void addNode(T node) {
for (int i = 0; i < virtualNodes; i++) {
int hash = hash(node.toString() + "#VN" + i);
ring.put(hash, node);
}
}
public T getNode(Object key) {
int hash = hash(key.toString());
Map.Entry<Integer, T> entry = ring.ceilingEntry(hash);
return entry != null ? entry.getValue() : ring.firstEntry().getValue();
}
}
会话保持策略
Sticky Session保证同一用户请求路由到同一后端节点,适用于有状态应用。通过Cookie或IP哈希实现会话粘性。
@Configuration
public class SessionConfig {
@Bean
public RequestDistributor stickySession() {
return new CookieBasedStickySession("SERVERID", 3600);
}
}
健康检查机制
负载均衡器通过主动探针和被动监控检测后端节点健康状态,自动剔除故障节点,保障服务可用性。
# HAProxy健康检查配置
backend http_servers
option httpchk GET /health
http-check expect status 200
server web1 10.0.0.1:80 check inter 3s fall 3 rise 2
server web2 10.0.0.2:80 check inter 3s fall 3 rise 2