nginx的概念与几种负载均衡算法
Nginx的背景
Nginx和Apache一样都是一种WEB服务器。基于REST架构风格,以URI(Uniform Resources Identifier,统一资源描述符)或URL(Uniform Resources Locator,统一资源定位符)作为沟通依据,通过HTTP协议提供各种网络服务。WEB服务器的设计受网络规模、网络带宽、产品特点等因素局限,且各自的定位和发展不同,因此各种WEB服务器有着各自的鲜明特点。
Apache的发展时期很长,而且是毫无争议的世界第一大服务器。它有着很多特点:稳定、开源、跨平台等。它出现的时间太长了,它兴起的年代,互联网产业远远比不上现在,所以它被设计为一个重量级的WEB服务器,不支持高并发。在Apache上运行数以万计的并发访问,会导致服务器消耗大量内存。操作系统对其进行进程或线程间的切换也消耗了大量的CPU资源,导致HTTP请求的平均响应速度降低。这些因素都决定了Apache不可能称为高性能的WEB服务器,因此轻量级的高并发服务器Nginx就登上了舞台。
Nginx的反向代理与负载均衡
Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理服务器进行负载均衡的实现。
反向代理服务器指的是服务端做代理,客户端要访问服务端就要通过反向代理服务器,访问的时候客户端并不知道自己访问的是代理(无感知代理存在),因此实际访问的服务端对客户端来说是隐藏的。有反向代理自然就有正向代理,正向代理则是代理客户端去访问不能直接访问的服务端。
实际的项目场景通常会同时应用到正向代理和反向代理:正向代理服务器代理客户端的请求去访问目标服务器,目标服务器是一个反向代理服务器,方向代理了多个真正的业务处理服务器。

明白了反向代理服务器的概念,就知道反向代理服务器会将来自客户端的请求转发给实际的业务处理服务器进行业务处理和返回响应。那么,如果有多个处理相同业务的业务处理服务器的话,Nginx会按照一定的规则将请求分发到每一个业务处理服务器,保证每一个请求都能够及时被处理和响应,这就是负载均衡。
负载均衡分为其实硬件负载均衡和软件负载均衡两种。硬件负载均衡也称为硬负载,如F5负载均衡,相对造价昂贵成本较高,但是数据的稳定性安全性等等有非常好的保障,如中国移动、中国联通这样财大气粗的公司就会选择硬负载进行操作。然而,更多的公司因为成本因素,会选择软件负载均衡,软件负载均衡是使用软件来进行负载均衡,是一种利用现有的技术结合主机硬件实现的消息队列分发机制。Nginx就是一款实现软件负载均衡的应用。
Nginx支持的负载均衡调度算法
轮询(weight,默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,Nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率。权重的数值越大,被分配到请求的几率越大。权重值可以根据不同的后端服务器的硬件配置进行调整,在配置的server后面加上weight=number修改权重值,这种方式叫做加权轮询。
IP绑定(ip_hash):每个请求按照发起客户端的IP的hash结果进行匹配,同样IP地址的客户端总是会访问同一个后端服务器,在一定程度上解决了集群部署环境下Session共享的问题。
最快响应时间(fair):智能调度算法,动态地根据后端服务器的处理处理效率和响应时间对请求进行均衡分配,响应时间短、处理效率高的服务器分配到请求的概率高,响应时间长、处理效率低的服务器分配到请求的概率低。使用这种算法需要安装upstream_fair模块。
URL绑定(url_hash):按照访问的URL的hash结果分配请求,相同的URL会访问同一个后端服务器,在一定程度上可以提高缓存的效率。使用这种算法需要安装Nginx的hash软件包。
最小连接数(least_conn):优先将请求分配给压力较小的后端服务器,这样可以平衡每个后端服务器下等待队列的长度,并避免向压力大的服务器添加更多的请求。
"凡世的喧嚣与明亮,世俗的快乐和幸福,如同清亮的溪涧,在风里,在我眼前,汨(mi)汨而过,温暖如同泉水一样涌出来。我没有奢望,我只要你快乐,不要悲伤。"
nginx的概念与几种负载均衡算法的更多相关文章
- Nginx几种负载均衡算法及配置实例
本文装载自: https://yq.aliyun.com/articles/114683 Nginx负载均衡(工作在七层"应用层")功能主要是通过upstream模块实现,Ngin ...
- [PHP] 6种负载均衡算法
CP from : https://www.cnblogs.com/SmartLee/p/5161415.html http://www.dataguru.cn/thread-559329-1-1. ...
- SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法----Ribbon(三)
一.Ribbon是什么? Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具(这里区别于nginx的负载均衡).简单来说,Ribbon是Netf ...
- octavia的实现与分析(一)·openstack负载均衡的现状与发展以及lvs,Nginx,Haproxy三种负载均衡机制的基本架构和对比
[负载均衡] 大量用户发起请求的情况下,服务器负载过高,导致部分请求无法被响应或者及时响应. 负载均衡根据一定的算法将请求分发到不同的后端,保证所有的请求都可以被正常的下发并返回. [主流实现-LVS ...
- openstack octavia的实现与分析(一)openstack负载均衡的现状与发展以及lvs,Nginx,Haproxy三种负载均衡机制的基本架构和对比
[负载均衡] 大量用户发起请求的情况下,服务器负载过高,导致部分请求无法被响应或者及时响应. 负载均衡根据一定的算法将请求分发到不同的后端,保证所有的请求都可以被正常的下发并返回. [主流实现-LVS ...
- nginx的几种负载均衡策略
转自https://www.cnblogs.com/1214804270hacker/p/9325150.html 一.关于Nginx的负载均衡 在服务器集群中,Nginx起到一个代理服务器的角色(即 ...
- nginx的6种负载均衡策略
在服务器集群中,Nginx起到一个反向代理服务器的作用.为了避免单独一个服务器压力过大导致服务器奔溃,就需要将不同用户的请求转发给不同给不同的服务器,保证集群中的每一台服务器都能正常运作,这种机制就叫 ...
- Nginx几种负载均衡方式介绍
Nginx几种负载均衡方式介绍 前言 负载均衡就是Nginx将请求分摊到不同的服务器中,保证服务的可用性,缓解服务压力,保证服务的响应速度,即使某一个应用服务不可用,也可以保证业务的正常进行,并且方便 ...
- nginx作反向代理,实现负载均衡
nginx作反向代理,实现负载均衡按正常的方法安装好 ngixn,方法可参考http://www.cnblogs.com/lin3615/p/4376224.html其中作了反向代理的服务器的配置如下 ...
随机推荐
- 进行API开发选gRPC还是HTTP APIs?
上一篇文章我带着大家体验了一把<ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)>,如果有兴趣的可以点击链接进行查看,相信跟着做的你,也是可以跑起来的.这篇文章我们将一 ...
- .NET Core微服务之基于IdentityServer建立授权与验证服务
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.IdentityServer的预备知识 要学习IdentityServer,事先得了解一下基于Token的验证体系,这是一个庞大的主题 ...
- 基于SpringBoot实现定时任务的设置(常用:定时清理数据库)
1.构建SpringBoot工程项目 1)创建一个Springboot工程,在它的程序入口加上@EnableScheduling,开启调度任务. @SpringBootApplication @Ena ...
- Java Web开发模式
一 Java Web开发模式的变迁 1 最初的Java web服务器端编程技术是Servlet,利用Servlet就可以开发出一个Web应用程序. 2 为了解决Servlet缺陷,SUN推出了JSP技 ...
- C# 默认访问权限
声明类.方法.字段.属性时不加访问权限修饰符时的访问权限是什么呢?1. 声明命名空间.类,前面不加限制访问修饰符时,默认访问权限为internal——访问仅限于当前程序集. 2. 声明类成员(域.属性 ...
- c#编写一个简单的http服务器
先来张我的帅照哈哈哈 好了不臭美了 上代码 世间万物 只有想不到 没有做不到 哈哈哈 仔细阅读代码 我要凑够 150个字 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 ...
- IT企业级应⽤开发模式演化
前端研发流程 传统To B类系统的研发模式 探索 & 思考设计模式库(DPL)设计语⾔设计语⾔详解基于MVVM模式的Web框架 & UI库优化后的开发模式实现价值实践 赋能 赋能授权( ...
- 编程语言 Node.js中使用到的npm工具
啥是npm? npm就是(node package manager)包结点管理器,它随同Node.js一起安装的,由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了. 同样可以通过输 ...
- K3日志定时备份
K3日志超过5万条以后,每次用户登陆后,系统都会提示日志太多.但是日志又不能随意删除,所以需要做个数据库定时任务,定时把日志转移到备份表. declare @dt datetime;; SELECT ...
- .net 获取时间十二进制与二十四进制
[说明] visual studio工具,.net项目,获取时间 [易错问题] ①二十四小时制(HH小时大写) System.DateTime.Now.ToString("yyyy-MM-d ...