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其中作了反向代理的服务器的配置如下 ...
随机推荐
- ASP.NET Core WebApi中简单像素转换跟踪实现
像素跟踪虽然是最早用于跟踪营销转换的方法,但它仍然被广泛使用,像Facebook这样的大公司仍然将其视为跟踪网页转换的方法之一. 由于它的简单性,通过像素方法的跟踪转换仍然被广泛使用.它不需要任何复杂 ...
- Docker Swarm搭建多服务器下Docker集群
对于有多台服务器来讲,如果每一台都去手动操控,那将会是一件非常浪费时间的事情,毕竟时间这东西,于我们而言,十分宝贵,或许在开始搭建环境的时候耗费点时间,感觉是正常的,我也如此,花费大堆时间在采坑和填坑 ...
- MySQL自定义函数与存储过程
1.前置条件 MySQL数据库中存在表user_info,其结构和数据如下: mysql> desc user_info; +-----------+----------+------+---- ...
- SpringBoot轻松整合ElasticSearch
完整项目代码地址(https://github.com/fonxian/spring-elasticsearch-example/tree/master/spring-elasticsearch-ex ...
- 表单数据验证方法(一)—— 使用validate.js实现表单数据验证
摘要:使用validate.js在前端实现表单数据提交前的验证 好久没写博客了,真的是罪过,以后不能这样了,只学习不思考,学的都是白搭,希望在博客园能记录下自己学习的点滴,虽然记录的都是些浅显的技术, ...
- CMD命令讲解(一)SC
参考网站:https://technet.microsoft.com/en-us/library/bb490995.aspx 备注:网站内容是翻译得来,源网站在上面 SC 与服务控制器和已安装的服务进 ...
- 用jQuery实现切换动态图片
1.实现动态图片的切换只需要改变目标图片的路径
- Java-获取年月日对应的天干地支
一.概述 本次是以java语言开发为例,计算出年月日对应的天干地支. 二.代码 public class MyDate { /** * 对于年月日的天干地支 */ private int year_g ...
- java获取机器IP地址常用方法
private String getHostIP(){ Enumeration<NetworkInterface> allNetInterfaces = null; String resu ...
- C语言字符数组回顾
赋值篇: Part1 错误引例*2: char c6[];//WRONG c6="HELLO";//WRONG char c7[];//WRONG c7[]='H';// ...