乐趣区

关于前端:Nginx-的负载均衡模式有哪些它的实现原理是什么

Nginx 是后端工程师和运维工程师,以及前端工程师必须要把握的必备技能,尤其在分布式系统利用越来越宽泛的明天,Nginx 曾经占据了 Web 服务器的大壁江山,并且还在一直地增长,比方国内的 BATJ、网易、新浪等公司都能够看到它的身影。Nginx 的负载平衡模式有哪些?它的实现原理是什么?

什么是 Nginx?

Nginx 是一款开源的高性能轻量级 Web 服务器(也叫 HTTP 服务器),它次要提供的性能是:反向代理、负载平衡和 HTTP 缓存。它于 2004 年首次公开公布,2011 年成立同名公司以提供反对,2019 年 3 月被 F5 Networks 以 6.7 亿美元收买。

之所以须要应用负载平衡是因为,如果咱们应用的是一台服务器,那么在高峰期时很多用户就须要排队期待零碎响应,因为一台服务器能解决的并发数是固定的。例如,一个 Tomcat 在默认状况下只能开启 150 个线程(Tomcat 8.5.x 版本)来解决并发工作,如果并发数超过了最大线程数,那么新来的申请就只能排队期待解决了,如下图所示:

然而如果有负载平衡的话,咱们就能够将所有的申请调配到不同的服务器上。如果 1 台服务器能够解决 2000 个申请,那么 5 台服务器就能够解决 10000 个申请了,这样就大大提高了零碎解决业务的能力,如下图所示:

晓得了负载平衡的益处之后,咱们来看下 Nginx 负载平衡的性能。

Nginx 次要的负载平衡策略(内置的负载平衡)有以下四种:

  • 轮询策略(默认负载平衡策略)
  • 起码连接数负载平衡策略
  • ip-hash 负载平衡策略
  • 权重负载平衡策略

轮循策略

轮询负载策略是指每次将申请按程序轮流发送至相应的服务器上,它的配置示例如下所示:

在以上实例中,当咱们应用“ip:80/”拜访时,申请就会轮询的发送至下面配置的三台服务器上。

Nginx 能够实现 HTTP、HTTPS、FastCGI、uwsgi、SCGI、memcached 和 gRPC 的负载平衡。

起码连接数负载平衡策略

此策略是指每次将申请散发到以后连接数起码的服务器上,也就是 Nginx 会将申请试图转发给绝对闲暇的服务器以实现负载平衡,它的配置示例如下:

ip-hash 负载平衡策略

以上三种负载平衡的配置策略都不能保障将每个客户端的申请固定的调配到一台服务器上。如果用户的登录信息是保留在单台服务器上的,而不是保留在相似于 Redis 这样的第三方中间件上时,如果不能将每个客户端的申请固定的调配到一台服务器上,就会导致用户的登录信息失落。因而用户在每次申请服务器时都须要进行登录验证,这样显然是不合理的,也是不能被用户所承受的,所以在非凡状况下咱们就须要应用 ip-hash 的负载平衡策略。

ip-hash 负载平衡策略能够依据客户端的 IP,将其固定的调配到相应的服务器上,它的配置示例如下:

Nginx 的实现原理是,首先客户端通过拜访域名地址收回 HTTP 申请,拜访的域名会被 DNS 服务器解析为 Nginx 的 IP 地址,而后将申请转发至 Nginx 服务器,Nginx 接管到申请之后会通过 URL 地址和负载平衡的配置,匹配到配置的代理服务器,而后将申请转发给代理服务器,代理服务器拿到申请之后将处理结果返回给 Nginx,Nginx 再将后果返回给客户端,这样就实现了一次失常的 HTTP 交互。

加权负载平衡

以上配置示意,5 次申请中有 3 次申请会分发给 srv1,1 次申请会分发给 srv2,另外 1 次申请会分发给 srv3。

Nginx 的四种内置负载平衡的执行策略:轮询策略(默认负载平衡策略)、起码连接数负载平衡策略、ip-hash 负载平衡策略和权重负载平衡策略,其中 ip-hash 的负载平衡策略会将客户端的申请固定散发到一台服务器上。

退出移动版