云开·全站体育app登录 反向代理、负载均衡!优秀的 Nginx 是如何做到的?

发布于:25-01-21 播放次数:

你一定听说过 Nginx。如果你还没有听说过它,那么你一定听说过它的“同行”Apache!

Nginx的出现

Nginx 与 Apache 一样,是一个 Web 服务器。基于REST架构风格,使用统一资源标识符(Uniform Resources Identifier)URI或统一资源定位器(Uniform Resources Locator)URL作为通信基础,通过HTTP协议提供各种网络服务。

但这些服务器在最初设计时受到当时环境的限制,比如当时的用户规模、网络带宽、产品功能等限制,各自的定位和发展也各不相同。这也使得每一种Web服务器都有自己鲜明的特点。

Apache有着悠久的发展历史,是无可争议的世界第一服务器。它具有很多优点:稳定、开源、跨平台等。

它已经存在太久了。在刚刚兴起的时代kaiyun全站网页版登录,互联网行业远不如现在。所以它被设计成重量级的。

不支持高并发服务器。在Apache上运行数万个并发访问会导致服务器消耗大量内存。

操作系统在进程或线程之间的切换也会消耗大量的CPU资源,导致HTTP请求的平均响应速度降低。

这些都决定了Apache无法成为高性能的Web服务器,轻量级高并发服务器Nginx应运而生。

俄罗斯工程师 Igor Sysoev 在 Rambler Media 工作期间使用 C 语言开发了 Nginx。

Nginx 作为 Web 服务器,一直为 Rambler Media 提供优秀、稳定的服务。随后,Igor Sysoev 开源了 Nginx 代码,并授予其自由软件许可证。

Nginx之所以受欢迎,是因为以下几点:

Nginx 的用武之地

Nginx是一个免费、开源、高性能的HTTP服务器和反向代理服务器;它也是 IMAP、POP3 和 SMTP 代理服务器。

Nginx可以作为HTTP服务器来发布网站,Nginx可以作为反向代理来实现负载均衡。

关于代理

说到代理,首先我们需要明确一个概念。所谓代理,就是代表,就是渠道;此时涉及到两个角色开yun体育app官网网页登录入口,一个是代理角色,一个是目标角色。

代理角色通过该代理访问目标角色完成某些任务的过程称为代理操作过程;就像生活中的专卖店一样,如果顾客在阿迪达斯专卖店购买了一双鞋云开·全站体育app登录,那么该专卖店就是代理商,而代理商角色就是阿迪达斯制造商。目标角色是用户。

转发代理

在讲反向代理之前,我们先来了解一下正向代理。正向代理也是大家接触到的最常见的代理模式。我们从两个方面来谈谈正向代理的处理方式,分别从软件方面和生活方面。让我们解释一下什么是转发代理。

在当今的网络环境下,如果我们因为技术需要想要访问某些国外网站,你会发现我们无法通过浏览器访问某些国外网站。

这时候大家就可以使用操作FQ来访问。 FQ的主要方法是寻找可以访问国外网站的代理服务器。我们将请求发送到代理服务器,代理服务器访问国外网站,然后传输访问的数据。把它交给我们吧!

上述代理模式称为正向代理。正向代理最大的特点是客户端非常清楚自己要访问的服务器地址;服务器只知道请求来自哪个代理服务器,而不知道请求来自哪个具体客户端;正向代理模式屏蔽或隐藏真实的客户端信息。

我们看一个示意图(我把客户端和正向代理放在一起,他们都属于同一个环境,后面会介绍):

tengine 动态缓存处理_缓存是静态还是动态_动态缓存区严重不足

客户端必须设置转发代理服务器。当然,前提是要知道正向代理服务器的IP地址和代理程序的端口。

如下图:

动态缓存区严重不足_缓存是静态还是动态_tengine 动态缓存处理

总结一下:正向代理,“充当客户端的代理”,是客户端和源服务器(Origin Server)之间的服务器。为了从源服务器获取内容,客户端向代理发送请求并指定目标(源服务器)。

然后代理将请求转发给源服务器,并将获取到的内容返回给客户端。客户端必须进行一些特殊设置才能使用转发代理。

转发代理的目的:

反向代理

现在我们了解了什么是正向代理,让我们继续看看如何处理反向代理。例如,在我国的一个网站上,每天同一时间连接该网站的访问者数量呈爆炸式增长。单一的服务器远远不能满足人们日益增长的购买欲望。 。

这时候,一个熟悉的术语出现了:分布式部署;即通过部署多台服务器来解决访问人数限制的问题。

某网站中的大部分功能也是直接使用Nginx进行反向代理来实现的,并且封装了Nginx等组件后,有一个花哨的名字:Tengine。

感兴趣的童鞋可以访问Tengine官网查看具体信息:

http://tengine.taobao.org/

那么反向代理是通过什么方式实现分布式集群操作的呢?我们先看一个示意图(我把服务器和反向代理框在一起,它们都属于同一个环境,后面会介绍):

tengine 动态缓存处理_缓存是静态还是动态_动态缓存区严重不足

从上图可以清楚地看到,Nginx服务器接收到多个客户端向服务器发送的请求后,按照一定的规则分发到后端业务处理服务器进行处理。

这时,请求的来源,即客户端是明确的,但不清楚是哪个服务器处理该请求。 Nginx 扮演着反向代理的角色。

客户端不知道代理的存在,反向代理对外界是透明的。访问者不知道他们正在访问代理。因为客户端不需要任何配置就可以访问。

反向代理,“它充当服务器的代理”,主要用于服务器集群分布式部署的情况。反向代理隐藏服务器信息。

反向代理的作用:

项目场景

通常,我们在操作实际项目时,正向代理和反向代理很可能存在于同一个应用场景中。正向代理代理客户端访问目标服务器的请求,目标服务器是反向单兴趣服务器。 ,反向代理多个真实业务处理服务器。

具体拓扑图如下:

动态缓存区严重不足_tengine 动态缓存处理_缓存是静态还是动态

拿一张图来说明正向代理和反向代理的区别,如下图:

动态缓存区严重不足_tengine 动态缓存处理_缓存是静态还是动态

插图:

事实上,Proxy 在这两个代理中所做的就是代表服务器发送和接收请求和响应。但从结构上看,左右是互换的,所以后来出现的代理方式被称为反向代理。

负载平衡

我们已经明确了所谓代理服务器的概念,那么接下来,Nginx就扮演着反向代理服务器的角色。分发请求遵循什么规则?能否针对不同的项目应用场景控制分配规则?

这里所说的客户端发送的请求数和Nginx反向代理服务器接收到的请求数就是我们所说的负载。

请求数量按照一定的规则进行分配,不同服务器处理的规则就是平衡规则。

因此,将服务器收到的请求按照规则进行分发的过程称为负载均衡。

在实际项目运行过程中,负载均衡有两种:硬件负载均衡和软件负载均衡。硬件负载均衡也叫硬负载,比如F5负载均衡,价格比较贵。

但数据的稳定性和安全性却得到了很好的保证。只有中国移动、中国联通等公司才会选择硬载运营。

考虑到成本原因,更多的企业会选择使用软件负载均衡。软件负载均衡是利用现有技术结合主机硬件的消息队列分发机制。

tengine 动态缓存处理_缓存是静态还是动态_动态缓存区严重不足

Nginx支持的负载均衡调度算法如下:

① 权重轮询(默认):将收到的请求按顺序一一分配到不同的后端服务器。即使后端服务器在使用过程中出现故障,Nginx 也会自动将服务器从队列中删除,请求接受状态不会受到任何影响。

这样就可以为不同的后端服务器设置一个权重值(权重),以调整请求在不同服务器上的分配率。

权重数据越大,被分配到请求的概率越大;该权重值主要针对实际工作环境中不同的后端服务器硬件配置进行调整。

②ip_hash:根据发起客户端IP的哈希结果来匹配每个请求。在这种算法下,具有固定IP地址的客户端将始终访问同一个后端服务器。这也在一定程度上解决了集群部署环境下Session的问题。共享问题。

③公平:智能调整调度算法,根据后端服务器从请求处理到响应的时间动态均衡分配。

响应时间短、处理效率高的服务器,被分配到请求的概率就很高。响应时间长、处理效率低的服务器分配的请求较少。它是一种综合了前两者优点的调度算法。

但需要注意的是,Nginx 默认不支持公平算法。如果要使用该调度算法,请安装upstream_fair模块。

④url_hash:根据访问的URL的hash结果分发请求。每个请求的URL都会指向后端的固定服务器,这样可以提高Nginx作为静态服务器时的缓存效率。

还需要注意的是,Nginx 默认不支持这种调度算法。如果要使用,需要安装Nginx哈希软件包。

网络服务器比较

几种常用的Web服务器的比较如下所示:

动态缓存区严重不足_缓存是静态还是动态_tengine 动态缓存处理