负载均衡(Load Balance)学习笔记(四):Nginx负载均衡

本文介绍了Nginx作为高性能反向代理服务器如何实现负载均衡,包括正向代理与反向代理的基本概念。Nginx提供了多种负载均衡算法,如轮询、加权轮询、IP哈希和最少连接数等,以适应不同场景下的服务器资源分配,有效解决了高并发下的请求分配问题。其中,加权轮询适用于服务器性能不均的情况,IP哈希则有助于处理Session一致性问题。
摘要由CSDN通过智能技术生成

学习记录,仅供参考

前面介绍到软件实现的负载均衡有:Nginx、HAproxy、LVS,下面逐一介绍这三种具体原理,从前面我们可以知道,负载均衡其实就是一种调度策略。本篇主要介绍的是Nginx负载均衡。

那么Nginx 如何实现负载均衡?

想了解这个问题,那我们需要首先了解网络代理是什么。

一、网络代理

网络代理分为正向代理(Foward Proxy)和反向代理(Reverse Proxy),一般情况下,如果没有特别说明,代理技术默认说的是正向代理技术。

1、正向代理(Foward Proxy)

正向代理(Foward Proxy) 是一个位于客户端【用户A】和原始服务器【服务器B】之间的服务器【代理服务器】,为了从原始服务器取得内容,【用户A】向【代理服务器】发送一个请求并指定目标【服务器B】,然后【代理服务器】向【服务器B】转交请求并将获得的内容返回给客户端。

在这里插入图片描述
那为什么使用代理?比如最常见的科学上网

如下图所示,无法直接访问服务器,可以通过代理的方式进行访问。
在这里插入图片描述
常见的需求如下:

  • 可以做缓存,加速访问资源
  • 对客户端访问授权,上网进行认证
  • 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

2、反向代理(Reverse Proxy)

反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

在这里插入图片描述
3、总结

正向代理即是客户端代理, 代理客户端, 服务端不知道实际发起请求的客户端.
反向代理即是服务端代理, 代理服务端, 客户端不知道实际提供服务的服务端

二、Nginx 负载均衡

1、Nginx是什么

Nginx 作为一个基于 C 实现的高性能 Web 服务器,可以通过系列算法解决上述的负载均衡问题。并且由于它具有高并发、高可靠性、高扩展性、开源等特点,成为开发人员常用的反向代理工具。

2、Nginx 如何实现负载均衡

首先我们知道Nginx是一款高效的反向代理工具,那么在进行大量请求时,客户端用户不需要知道具体是那个服务器执行了请求响应,通过Nginx进行分配服务器进行查询。Nginx提供了多种分配算法,算法如下:

(1)轮询 (round-robin)

轮询为负载均衡中较为基础也较为简单的算法,它不需要配置额外参数。假设配置文件中共有N台服务器,该算法遍历服务器节点列表,并按节点次序每轮选择一台服务器处理请求。当所有节点均被调用过一次后,该算法将从第一个节点开始重新一轮遍历。

特点:由于该算法中每个请求按时间顺序逐一分配到不同的服务器处理,因此适用于服务器性能相近的集群情况,其中每个服务器承载相同的负载。但对于服务器性能不同的集群而言,该算法容易引发资源分配不合理等问题。

(2)加权轮询

为了避免普通轮询带来的弊端,加权轮询应运而生。在加权轮询中,每个服务器会有各自的 weight。一般情况下,weight 的值越大意味着该服务器的性能越好,可以承载更多的请求。该算法中,客户端的请求按权值比例分配,当一个请求到达时,优先为其分配权值最大的服务器。

特点: 加权轮询可以应用于服务器性能不等的集群中,使资源分配更加合理化。

(3)IP 哈希(IP hash)

ip_hash 依据发出请求的客户端 IP 的 hash 值来分配服务器,该算法可以保证同 IP 发出的请求映射到同一服务器,或者具有相同 hash 值的不同 IP 映射到同一服务器。

特点: 该算法在一定程度上解决了集群部署环境下 Session 不共享的问题。

Session 不共享问题是说,假设用户已经登录过,此时发出的请求被分配到了 A 服务器,但 A 服务器突然宕机,用户的请求则会被转发到 B 服务器。但由于 Session 不共享,B 无法直接读取用户的登录信息来继续执行其他操作。

(4)URL hash

url_hash 是根据请求的 URL 的 hash 值来分配服务器。该算法的特点是,相同 URL 的请求会分配给固定的服务器,当存在缓存的时候,效率一般较高。然而 Nginx 默认不支持这种负载均衡算法,需要依赖第三方库。

(5)最小连接数(Least Connections)

假设共有N台服务器,当有新的请求出现时,遍历服务器节点列表并选取其中连接数最小的一台服务器来响应当前请求。连接数可以理解为当前处理的请求数。

Nginx通过如上算法实现了负载均衡。

相关参考文献地址:https://zhuanlan.zhihu.com/p/134220193

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值