一、nginx概述 在很多的大型网站都是用nginx来进行服务代理,那么nginx究竟是什么,有什么作用呢? 在官网上是这样介绍的: nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server. 翻译过来就是:nginx [engine x]是一个HTTP和反向代理服务器、一个邮件代理服务器和一个通用的TCP/UDP代理服务器。其实nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器,也是一个IMAP、POP3、SMTP代理服务器。nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向代理进行负载均衡的实现。二、nginx的正向和反向代理1.正向代理 所谓的代理,就是所想访问的目标资源对用户来说是不可见的,而另外有一个角色拥有对目标资源的访问权限,进而用户可以通过这个代理角色来访问这个目标资源。例如:当我们想去访问国外的某些网站,此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的,此时大家可能都会用一个操作FQ进行访问,FQ的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们!2.反向代理 反向代理和正向代理的区别就是:正向代理代理客户端,反向代理代理服务器。 反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。通过下面的图片我们可以看到正向代理和反向代理的不同: 关于反向代理我们可以用一个例子来进行阐述,如我们熟知某宝网站,每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了,此时就出现了一个大家耳熟能详的名词:分布式部署;也就是通过部署多台服务器来解决访问人数限制的问题;某宝网站中大部分功能也是直接使用nginx进行反向代理实现的。3.反向代理的作用:(1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网(2)负载均衡,通过反向代理服务器来优化网站的负载三、nginx负载均衡1.什么是负载均衡 在互联网早期,业务流量相对比较小,而且业务逻辑比较简单,单台服务器便可以满足基本的需求;但是随着互联网的发展,业务流量越来越大、业务逻辑也越来越复杂,单台机器的性能问题以及单点问题凸显了出来,因此需要多台机器来进行性能的水平扩展以及避免单点故障。但是要如何将不同的用户的流量分发到不同的服务器上面呢? 那么早期的解决方案是使用DNS做负载,通过给客户端解析不同的IP地址,让客户端的流量直接到达各个服务器。但是这种方法有一个很大的缺点就是延时性问题,在做出调度策略改变以后,由于DNS各级节点的缓存并不会及时的在客户端生效,而且DNS负载的调度策略比较简单,无法满足业务需求,因此就出现了负载均衡。 客户端的流量首先会到达负载均衡服务器,由负载均衡服务器通过一定的调度算法将流量分发到不同的应用服务器上面,同时负载均衡服务器也会对应用服务器做周期性的健康检查,当发现故障节点时便动态的将节点从应用服务器集群中剔除,以此来保证应用的高可用。 综上所述,负载均衡,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。负载均衡构建在原有网络结构之上,它提供了一种透明且廉价有效的方法扩展服务器和网络设备的带宽、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性。2.负载均衡的分类 (1)硬件负载均衡 硬件负载均衡器的性能稳定,且有生产厂商作为专业的服务团队。但其成本很高,一台硬件负载均衡器的价格一般都在十几万到几十万,甚至上百万。知名的负载均衡器有F5、Array、深信服、梭子鱼等。 (2)软件负载均衡 软件负载均衡成本几乎为零,基本都是开源软件。例如,LVS、HAProxy、Nginx等。3.负载均衡的算法 (1) 加权轮询(weight Round Robbin,默认,常用): 接收到的请求按照权重分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,Nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。 (2)轮询(Round Robbin) 当服务器群中各服务器的处理能力相同时,且每笔业务处理量差异不大时,最适合使用这种算法。 轮循,按公约后的权重设置轮循比率。存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。 (3)Random随机算法 按权重设置随机概率,在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。 (4)最小连接(Least Connections)及加权最小连接(Weighted Least Connection) 有点类似轮询与加权轮询,最少连接是在多个服务器中,与处理连接数(会话数)最少的服务器进行通信的算法。即使在每台服务器处理能力各不相同,每笔业务处理量也不相同的情况下,也能够在一定程度上降低服务器的负载。 加权最少连接为最少连接算法中的每台服务器附加权重的算法,该算法事先为每台服务器分配处理连接的数量,并将客户端请求转至连接数最少的服务器上。 (5)哈希算法 分为普通哈希和一致性哈希,相同参数的请求总是发到同一提供者。当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。 (6)IP地址散列 通过管理发送方IP和目的地IP地址的散列,将来自同一发送方的分组(或发送至同一目的地的分组)统一转发到相同服务器的算法。当客户端有一系列业务需要处理而必须和一个服务器反复通信时,该算法能够以流(会话)为单位,保证来自相同客户端的通信能够一直在同一服务器中进行处理。4.负载均衡的作用 (1)解决并发压力,提高应用处理性能(增加吞吐量,加强网络处理能力); (2)提供故障转移,实现高可用; (3)通过添加或减少服务器数量,提供网站伸缩性(扩展性); (4)安全防护;(负载均衡设备上做一些过滤,黑白名单等处理)5.负载均衡的应用场景 应用于高访问量的业务,横向扩张系统,消除单点故障等 . {9 V9 i& F7 n$ f" y1 N! F
|