Nginx是负载均衡的必备中间件,也是大型架构的核心组件,下面我就全面来详解Nginx负载均衡@mikechen
Nginx
Nginx 是一个高性能的 HTTP 、和反向代理服务器,广泛应用于 Web 服务的负载均衡、缓存、和静态资源服务等场景。
Nginx ,通常用于负载均衡,以分配流量并提高系统的可用性、和可靠性。
如下图所示:

upstream backend {
server 192.168.1.101;
server 192.168.1.102;
server 192.168.1.103 backup;
}
Nginx,可以通过负载均衡,把流量分配到:192.168.1.101、192.168.1.102、192.168.1.103…等服务器上。
这样,可以极大提升并发性能,以及扩展性、和可用性等。
Nginx算法
Nginx 提供多种负载均衡算法,用于分发请求到后端服务器,如下图所示:

轮询(Round Robin)
默认策略,按照请求的顺序,依次将流量分配给每个服务器。
如下图所示:

假如,我有3台服务器:
http {
upstream mikechen{
server server1.mikechen.cc;
server server2.mikechen.cc;
server server3.mikechen.cc;
}
server {
listen 80;
location / {
proxy_pass http://mikechen;
}
}
}
每个请求,按顺序分配到后端服务器。
轮询这种方式,简单、高效,所有后端服务器被均匀使用。
加权轮询(Weighted Round Robin)
加权轮询,就是在轮询的基础上增加权重(weight)。

如下所示:
http {
upstream mikechen{
server server1.mikechen.cc weight=3; # 权重高,接收更多请求
server server2.mikechen.cc weight=1;
server server3.mikechen.cc weight=2;
}
server {
listen 80;
location / {
proxy_pass http://mikechen;
}
}
}
权重高的服务器接收更多请求,比如:上面server1.mikechen.cc weight=3,权重为3就可以获取更多的流量。
应用场景:
后端服务器性能不均时,通过调整权重实现负载优化。
IP 哈希(IP Hash)
IP 哈希(IP Hash),通过客户端 IP 地址计算哈希值,根据哈希值分配请求到后端服务器。
如下图所示:

IP 哈希(IP Hash),保证同一 IP 的请求,始终分配到同一服务器(会话保持)。
IP 哈希(IP Hash),会存在一个比较大的问题,就是:后端服务器列表变更时,哈希结果可能发生变化。
最少连接数(Least Connections)
最少连接数(Least Connections):就是将请求分配给当前处理,连接最少的服务器。
如下图所示:

最少连接数(Least Connections),将请求分配给当前连接数最少的服务器,适合长时间保持连接的场景。
陈睿mikechen
10年+一线大厂技术经验,大厂资深面试官,就职于阿里、淘宝等一线大厂。
关注作者「mikechen」公众号,获取更多技术干货!
后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》