4.3.1 负载均衡算法
常用负载均衡算法
负载均衡算法是用来在计算机网络中分配工作负载到多个资源上的一种技术。以下是一些常见的负载均衡算法:
轮询(Round Robin):将请求依次分配给每个服务器,每个服务器接收到的请求数大致相同。
加权轮询(Weighted Round Robin):在轮询的基础上,为每个服务器分配一个权重,根据权重的大小决定分配给服务器的请求比例,权重越高的服务器处理的请求越多。
最小连接数(Least Connection):将请求分配给当前连接数最少的服务器,以确保所有服务器的负载尽可能平衡。
加权最小连接数(Weighted Least Connection):根据服务器的权重和当前连接数,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。
IP哈希(IP Hashing):根据客户端的IP地址将请求分配给服务器,这样相同IP的请求将始终被分配到同一个服务器上。
URL哈希(URL Hashing):根据请求的URL将请求分配给服务器,这样相同URL的请求将始终被分配到同一个服务器上。
加权最少响应时间(Weighted Least Response Time):将请求分配给响应时间最短的服务器,权重和响应时间成反比。
一致性哈希(Consistent Hashing):根据请求的哈希值和服务器的哈希环将请求分配给特定的服务器,当服务器数量变化时,只有少量请求需要重新分配。
动态服务发现(Dynamic Service Discovery):通过监控服务器的负载状况和性能指标,动态调整请求的分配策略,以适应实时变化的负载情况。
这些算法可以单独使用,也可以组合使用,以满足不同场景下的负载均衡需求。
Nginx的5种负载均衡算法
- 轮询法(Round Robin)(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
- 加权轮询法(Weight Round Robin)
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream bakend {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
- 源地址哈希法(IP Hash)
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream bakend {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
- fair
fair算法会监控每个后端服务器的响应时间,并根据响应时间的长短来调整请求的分配情况。当某个服务器的响应时间较短时,fair算法会增加该服务器接收请求的概率,从而使得更多的请求被发送到这个服务器上;反之,如果某个服务器的响应时间较长,fair算法会减少该服务器接收请求的概率,以避免过度负载。
upstream backend {
server server1;
server server2;
fair;
}
- url_hash
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。例: 在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。
upstream backend {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
参考
https://www.pdai.tech/md/algorithm/alg-domain-load-balance.html