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其中作了反向代理的服务器的配置如下 ...
随机推荐
- LVS(五)LVS的持久连接
什么是持久链接 把某个客户端的请求始终定向到同一应用服务器上.对于LVS来说持久连接和算法没有关系.也就是使用任何算法LVS都可以实现同一客户端的请求转发到之前选定的应用服务器,以保持会话.而且还能实 ...
- Windows Server 2012 R2安装SqlServer 2016
1.系统安装 微软操作系统 Windows Server 2012 R2 官方原版镜像 Windows Server 2012 R2 是由微软公司(Microsoft)设计开发的新一代的服务器专属操作 ...
- netstat命令总结
nestat介绍 netstat是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字. 使用 ...
- 使用Atlas进行元数据管理之Atlas简介
背景:笔者和团队的小伙伴近期在进行数据治理/元数据管理方向的探索, 在接下来的系列文章中, 会陆续与读者们进行分享在此过程中踩过的坑和收获. 元数据管理系列文章: [0] - 使用Atlas进行元数据 ...
- GoLang simple-project-demo-03
变量的定义 package main import "fmt" func main() { var a = "initial" fmt.Println(a) v ...
- Recording and playing back data
Recording and playing back data This tutorial will teach you how to record data from a running ROS s ...
- Asp.Net Core在CentOS部署与注意
部署具体步骤参考:将ASP.NET Core应用程序部署至生产环境中(CentOS7) 1.wwwroot是放静态文件的,Startup的配置里面要app.UseStaticFiles(); 2.在不 ...
- PostgreSQL相关整理
PostgreSQL权限管理之创建可更新表的普通用户 https://my.oschina.net/aven92/blog/528943 PostgreSQL学习手册(角色和权限) http://ww ...
- ES6基础(二)
一.ES6字符串扩展 字符串模板 在传统的JavaScript语言中,输出模板通常是这样写的. 上面这种写法繁琐不方便,于是ES6中引入了字符串模板解决这个问题. 用反引号(`)标识.他可以当做普通字 ...
- java:数据结构(二)栈的应用(进制转换全收集)
说到进制转换,java已经封装了基本的方法,在竞赛中使用封装的方法自然能节省大量时间 另一位仁兄介绍的封装好的方法: https://blog.csdn.net/m0_37961948/article ...