基础原理和算法解析 nginx的负载均衡算法有哪些


基础原理和算法解析 nginx的负载均衡算法有哪些

文章插图
前面我们讲了 Nginx 的 11 个阶段以及各个模块的用法,现在终于到了最重要也是最常用的一部分了,那就是反向代理和负载均衡,今天这篇文章介绍了负载均衡的原理以及对应的四种负载均衡算法,当然还有对应的指令及实战,欢迎品尝 。
负载均衡所谓负载均衡,就是 Nginx 把请求均匀的分摊给上游的应用服务器,这样即使某一个服务器宕机也不会影响请求的处理,或者当应用服务器扛不住了,可以随时进行扩容 。
Nginx 在 AKF 可扩展立方体上的应用在 x 轴上,可以通过横向扩展应用服务器集群,Nginx 基于 Round-Robin 或者 Least-Connected 算法分发请求 。但是横向扩展并不能解决所有问题,当数据量大的情况下,无论扩展多少台服务,单台服务器数据量依然很大 。在 y 轴上,可以基于 URL 进行不同功能的分发 。需要对 Nginx 基于 URL 进行 location 的配置,成本较高 。在 z 轴上可以基于用户信息进行扩展 。例如将用户 IP 地址或者其他信息映射到某个特定的服务或者集群上去 。这就是 Nginx 的负载均衡功能,它的主要目的就是为了增强服务的处理能力和容灾能力 。
反向代理反向代理和负载均衡在某种程度上是密不可分的 。
Nginx 支持多种协议的反向代理 。四层的反向代理比较简单,无论是 UDP 还是 TCP 的流量过来,转发到上游的依然是 UDP 或 TCP 的流量 。
而到了应用层时,就不太相同了,因为 HTTP 的 Header 中包含了大量的业务信息,需要根据 HTTP 的头部转换成不同的协议 。
反向代理与缓存缓存这个问题分为两类,一类是时间缓存,一类是空间缓存 。
时间缓存是指,当用户请求一个页面的时候,Nginx 发现没有缓存,就会到后端服务器去取,在返回给用户响应的同时还会缓存一份,这样当下一个用户去请求的时候就会直接用缓存作为响应而不会再去请求上游的服务器 。空间缓存这种用的比较少,主要是指当用户发来请求的时候,Nginx 可以提前去上游服务器获取一些响应的内容,这个后面可以看到是怎么用的 。upstream 与 server 指令指令name 表示负载均衡集群的名字,而 {} 内指定了一系列的服务器server 后跟服务器地址,地址后还可以加一些参数 parametersSyntax: upstream name { ... }Default: —Context: httpSyntax: server address [parameters];Default: —Context: upstream功能:指定一组上游服务器地址,地址可以是域名、IP 地址或者 Unix Socket 地址 。可以在域名或者 IP 地址后加端口,如果不加端口,那么默认使用 80 端口 。通用参数:server 后可以添加的参数backup:指定当前 server 为备份服务,仅当非备份 server 不可用时,请求才会转发到该 server表示某台服务已经下线,不再服务负载均衡算法加权 Round-Robin 负载均衡算法Round-Robin(rr) 负载均衡算法发给上游服务器的请求是轮询发送的,相当于所有上游服务器根据顺序依次处理发来的请求 。
有些情况下上游服务器性能不同,比如 4C8G 和 8C16G 的服务器都有,那么这时候就可以对服务器设置一些权重,让性能好的承担更多的请求 。
功能在加权轮询的方式访问 server 指令指定的上游服务集成在 Nginx 的 upstream 框架中,无法移除指令weight:服务访问的权重,默认是 1max_conns:server 的最大并发连接数,仅作用于单 worker 进程 。默认是 0,表示没有限制max_fails:在 fail_timeout 时间段内,最大的失败次数 。当达到最大失败时,会在 fail_timeout 秒内这台 server 不允许再次被选择fail_timeout:单位是秒,默认 10 秒,可以指定一段时间内最大失败次数 max_fails 以及到达 max_fails 之后该 server 不能访问的时间对上游服务使用 keepalive 长连接Nginx 与上游服务一般是在内网中的,所以开启 keepalive 后效果后更明显 。


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: