← 返回首页
⚖️

负载均衡架构

📂 architecture ⏱ 1 min 156 words

负载均衡架构

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