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其中作了反向代理的服务器的配置如下 ...
随机推荐
- 【Android Studio安装部署系列】二十、Android studio如何将so文件添加到svn中
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 在使用android studio的过程中,常常会遇到一个头疼的问题,添加的so,居然无法被svn添加. 选项都是灰的: 那这种问题 ...
- ES 05 - 通过Kibana管理Elasticsearch集群服务
目录 1 检查集群的健康状况 2 查看集群中的节点个数 3 查看集群中的索引 4 简单的索引操作 4.1 创建索引 4.2 删除索引 在本篇文章之前, 需要完成: ① 启动Elasticsearch服 ...
- 知识小罐头09(tomcat8启动源码分析 下)
初始化已经完成,现在就是启动这些组件,Tomcat中的start方法就是用于启动的,其实start的原理还是和上一篇说的初始化几乎一样!这里我就大概说一下,看几个比较关键的地方就行了. 前面的步骤就大 ...
- T4模板简单了解
T4模板基础 T4即为Text Template Transformation Toolkit,一种可以由自己去自定义规则的代码生成器.根据业务模型可生成任何形式的文本文件或供程序调用的字符串 在VS ...
- C++ Sqlite3的基本使用
|SQLite3简介 SQLite3只是一个轻型的嵌入式数据库引擎,占用资源非常低,处理速度比Mysql还快,专门用于移动设备上进行适量的数据存取,它只是一个文件,不需要服务器进程. SQL语句是S ...
- 只需两步!Eclipse+Maven快速构建第一个Spring Boot项目
随着使用Spring进行开发的个人和企业越来越多,Spring从一个单一简介的框架变成了一个大而全的开源软件,最直观的变化就是Spring需要引入的配置也越来越多.配置繁琐,容易出错,让人无比头疼, ...
- vue-resource实现数据的绑定、添加、删除
vue-resource实现数据的绑定.添加.删除 <!DOCTYPE html> <html lang="en"> <head> <ti ...
- docker run 之后执行多条命令
执行 ls docker run microsoft/dotnet ls && cd /root 执行 多条使用sh -c命令 在run后面加了一个sh -c命令,后面直接加多条语句即 ...
- c# String ,String[] 和 List<String>之间的转换
C#对字符串进行处理时,经常需要进行String,String[]和List<String>之间的转换 本文分析一下它们的差异和转换 一. 1. String > String[] ...
- Vmware安装CentOs7+gitlab(二)
在CentOS系统上安装所需的依赖:ssh,防火墙,postfix(用于邮件通知) ,wget,以下这些命令也会打开系统防火墙中的HTTP和SSH端口访问. 1.安装ssh和python sudo y ...