Nginx----请求分发中心
Nginx请求分发中心,需要明确几个基本问题,什么是请求,分发中心是什么,为什么需要分发中心。
什么是请求?
Niginx是一款高性能的HTTP服务器,这里的请求当然是指接收客户端发送的http协议请求。http协议的请求(常用POST和GET)是通过URL进行定位的,URL中的核心为IP地址与端口号。这里引申出来几个概念,IP地址是啥,端口号是啥,POST和GET是啥?
IP简单理解为网络设备的身份证,我们可以通过IP可以唯一的定位到某一台网络设备,当然定位过程中涉及很多复杂的路由层协议封装转发解析等过程,这里不深入探究。现在访问网站都不是直接使用IP,一般使用域名的方式访问,域名(www.mi.com)的出现是为了解决两个问题:一个问题是IP表意能力差(用户无法根据IP理解网站的功能),另一个问题是同一个网站的IP有可能发生变化(如业务增长导致服务器集群扩大需要更换IP)。域名并未改变通过URL定位服务器的本质,只不过将用户自己记IP的负担转嫁给了域名服务器,公司申请域名后,将与域名绑定的服务器IP提交给域名管理机构,即可自动实现域名与对应服务器IP的绑定。
端口号:这里指的是协议端口,同一个IP地址的端口可以有65536(0-65535)个。端口号可以形象的理解成酒店里的门牌号,我们向一台设备请求资源时需要指定具体端口号便于打开对应的房间获取服务,其他房间未实现HTTP协议即未提供开门的钥匙无法访问。HTTP协议默认的端口号为80。
请求的类型POST和GET:GET和POST为HTTP协议规定的两种请求格式,底层实现的原理都是通过TCP协议传输数据,两者的区别主要来自于不同浏览器在实现HTTP标准时规定的不同的使用方式。详细解读请参考博文:https://www.cnblogs.com/logsharing/p/8448446.html
继续引述一个问题TCP传输协议:
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,在收发数据前,必须和对方建立可靠的连接。与之对应的是UDP(User Data Protocol,用户数据报协议), UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。两者的主要区别在于是否需要关注连接,TCP是在确定连接的情况下进行数据传输,以此保证传输的可靠性;而UDP以牺牲传输的可靠性为代价换取效率。软件系统中一直存在的几个矛盾,可靠性与效率的矛盾,时间成本与空间成本的矛盾。
TCP协议中的经典问题,建立连接的三次握手与释放连接的四次握手。


断开比建立连接多一次的原因在于被动关闭方B在收到关闭请求时有可能还有数据未发送完,需要等数据发送完毕后才能关闭发送功能,所以统一对方关闭的响应与关闭己方发送的请求需要分两次发送,导致比建立连接时多一次。TCP/IP协议族包含很多协议,这里不再展开。
2. 回到初始提出的问题,什么是分发中心?为什么需要分发中心?
分发中心的作用可以参考火车站,不同的人(请求)需要去不同的地方,火车站(分发中心)根据不同的目的地进行分流,让每个人登上正确的列车。每列火车(每台服务器)的运力有限,为了满足更多的出行需求(请求),需要调度更多的列车提供服务。这里的分发和调度即为分发中心存在的意义。
在互联网架构中,这种分发中心称为反向代理服务器。
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
如下图示,Tomcat的最大并发请求数按1000计算,在超高并发请求场景无法满足业务需求,此时需要Nginx进行请求转发,将请求均衡转发至多台服务器。

有反向代理自然也有正向代理,正向代理是代理客户端的请求,将请求转发到internet,多应用于网络权限管控的场景,个人接触较多的即翻墙使用的代理服务器。反向代理是代理来自internet的请求,针对服务器。

以上简述了Nginx作为反向代理的重要作用,下面介绍Nginx是什么,还有什么功能。
Nginx 是一款高性能的 http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师伊戈尔·西索夫(Igor Sysoev)所开发,官方测试 nginx 能够支支撑 5 万并发链接,并且 cpu、内存等资源消耗却非常低,运行非常稳定。
Nginx的应用场景:
1、http 服务器。Nginx 是一个 http 服务可以独立提供 http 服务。可以做网页静态服务器。将静态网页资源直接部署在Nginx服务器中,用户可以直接访问Nginx获得网页。
2、虚拟主机。可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟主机。实现原理仍是Nginx的转发功能,需要在访问主机的hosts配置域名与IP的映射关系,便于HTTP请求进行资源定位。Nginx根据收到的请求进行转发。

3、反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用 nginx 做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
可以看出Nginx反向代理试用于多服务组成的服务集群场景,此时Nginx作为服务的请求入口,其自身需实现高可用保证集群的业务稳定。
可以使用keepalived实现Nginx高可用,keepalived 是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。
Keepalived 的作用是检测 web 服务器的状态,如果有一台 web 服务器死机,或工作出现故障,Keepalived 将检测到,并将有故障的 web 服务器从系统中剔除,当 web 服务器工作正常后 Keepalived 自动将 web 服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的 web 服务器。
keepalived 是以 VRRP 协议为实现基础的,VRRP 全称 Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将 N 台提供相同功能的
路由器组成一个路由器组,这个组里面有一个 master 和多个 backup,master 上面有一个对外提供服务的 vip(VIP = Virtual IPAddress,虚拟 IP 地址,该路由器所在局域网内其他机器的默认路由为该 vip),master 会发组播,当 backup 收不到 VRRP 包时就认为 master 宕掉了,这时就需要根据 VRRP 的优先级来选举一个 backup 当 master。这样的话就可以保证路由器的高可用了。
Nginx----请求分发中心的更多相关文章
- Nginx将请求分发到各web应用
介绍了VMWare12虚拟机.Linux(CentOS7)系统安装.部署Nginx1.6.3代理服务做负载均衡.接下来介绍通过Nginx将请求分发到各web应用处理服务. 一.Web应用开发 1.as ...
- tornado学习笔记18 _RequestDispatcher 请求分发器
根据Application的配置,主要负责将客户端的请求分发到具体的RequestHandler.这个类实现了HTTPMessageDelegate接口. 18.1 构造函数 定义: def __in ...
- jQuery源码分析系列(33) : AJAX中的前置过滤器和请求分发器
jQuery1.5以后,AJAX模块提供了三个新的方法用于管理.扩展AJAX请求,分别是: 1.前置过滤器 jQuery. ajaxPrefilter 2.请求分发器 jQuery. ajaxTran ...
- Magento请求分发与控制器
Magento请求分发与控制器 Magento使用的是MVC结构,模型-试图-控制器结构,这样更好的实现显示逻辑和数据,业务逻辑的分离,更好的适合开发! 下面为传统的mvc结构 URL请求被一个PHP ...
- SpringMVC请求分发的简单实现
简介 以前用了下SpringMVC感觉挺不错了,前段事件也简单了写了一些代码来实现了SpringMVC简单的请求分发功能,实现的主要思想如下: 将处理请求的类在系统启动的时候加载起来,相当于S ...
- 并发测试 java.lang.OutOfMemoryError: GC overhead limit exceeded Xms Xmx 阻塞请求 单节点 请求分发 负载均衡
at javax.servlet.http.HttpServlet.service(HttpServlet.java:705) at javax.servlet.http.HttpServlet.se ...
- 前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并把请求分发到不同的控制器去处理,根据控制器处理后的结果,生成相应的响应发送到客户端。前端控制器既可以使用Filter实现(Struts2采用这种方式),也可以使用Servlet来实现(spring MVC框架)。
本文转自http://www.cnblogs.com/davidwang456/p/4090058.html 感谢作者 前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并 ...
- Spring mvc 启动 和 请求分发
Spring mvc 启动 和 请求分发 启动加载: abstract class HttpServletBean extends HttpServlet void init() initServle ...
- nginx 请求限制
1.nginx 请求限制 1.连接频率限制 - limit_conn_module 2.请求频率限制 - limit_req_module 连接限制的语法 请求限制的语法 limit_conn_zon ...
随机推荐
- React Native实战一
效果图如下所示: 展示列表页面,点击跳转至详情页面: /** * Sample React Native App * https://github.com/facebook/react-nat ...
- React Native的ListView的布局使用
1> ListView组件用于显示一个垂直的滚动列表,其中的元素之间结构近似而仅数据不同. ListView更适于长列表数据,且元素个数可以增删.和ScrollView不同的是,ListView ...
- Java数组(3):创建测试数据
有时我们需要使用数组批量创建测试数据,接下来通过以下4点来举例. (1) 使用Arrays.fill()填充数据 (2) 使用Random类中JDK1.8提供的新方法用来生成随机数 (3) 一个随机数 ...
- 使用kubeadm安装kubernetes1.12.2版本脚本【h】
Master节点脚本: #!/bin/sh#使用系统的PATH环境export PATH=`echo $PATH` #停止firewall防火墙,并禁止开机自启动 systemctl stop fir ...
- vue如何监听键盘事件中的按键?
原文地址 背景 在一些搜索框中,我们往往需要监听键盘的按下(onkeydown)或抬起(onkeyup)事件以进行一些操作.在原生js或者jQuery中,我们需要判断e.keyCode的值来获取用户所 ...
- Tcpdump移植
摘要: tcpdump对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.n ...
- Spring MVCD框架中调用HanLP分词的方法
项目简要:关于java web的一个项目,用的Spring MVCd 框架.鉴于参与此次项目的人中并不是所人都做的Spring,为了能够提高效率,建议大家是先抛开SPring来写自己负责的模块,最后再 ...
- spring boot 项目开发常用目录结构
在spring boot开发中一些常用的目录划分 转载自https://blog.csdn.net/Auntvt/article/details/80381756: 一.代码层结构 根目录:net.c ...
- 【LOJ】#3014. 「JOI 2019 Final」独特的城市(长链剖分)
LOJ#3014. 「JOI 2019 Final」独特的城市(长链剖分) 显然我们画一条直径,容易发现被统计的只可能是直径某个距离较远的端点到这个点的路径上的值 用一个栈统计可以被统计的点,然后我们 ...
- Ubuntu 下几种软件安装的方法小结
1.tar.gz软件包的安装 1)解压tar.gz包 .tar.gz -C /home/Desktop # 将软件包名.tar.gz解压到指定的目录下 2)进入解压后的文件目录下 执行“./ ...