Nginx请求分发中心,需要明确几个基本问题,什么是请求,分发中心是什么,为什么需要分发中心。

  1. 什么是请求?

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----请求分发中心的更多相关文章

  1. Nginx将请求分发到各web应用

    介绍了VMWare12虚拟机.Linux(CentOS7)系统安装.部署Nginx1.6.3代理服务做负载均衡.接下来介绍通过Nginx将请求分发到各web应用处理服务. 一.Web应用开发 1.as ...

  2. tornado学习笔记18 _RequestDispatcher 请求分发器

    根据Application的配置,主要负责将客户端的请求分发到具体的RequestHandler.这个类实现了HTTPMessageDelegate接口. 18.1 构造函数 定义: def __in ...

  3. jQuery源码分析系列(33) : AJAX中的前置过滤器和请求分发器

    jQuery1.5以后,AJAX模块提供了三个新的方法用于管理.扩展AJAX请求,分别是: 1.前置过滤器 jQuery. ajaxPrefilter 2.请求分发器 jQuery. ajaxTran ...

  4. Magento请求分发与控制器

    Magento请求分发与控制器 Magento使用的是MVC结构,模型-试图-控制器结构,这样更好的实现显示逻辑和数据,业务逻辑的分离,更好的适合开发! 下面为传统的mvc结构 URL请求被一个PHP ...

  5. SpringMVC请求分发的简单实现

    简介     以前用了下SpringMVC感觉挺不错了,前段事件也简单了写了一些代码来实现了SpringMVC简单的请求分发功能,实现的主要思想如下: 将处理请求的类在系统启动的时候加载起来,相当于S ...

  6. 并发测试 java.lang.OutOfMemoryError: GC overhead limit exceeded Xms Xmx 阻塞请求 单节点 请求分发 负载均衡

    at javax.servlet.http.HttpServlet.service(HttpServlet.java:705) at javax.servlet.http.HttpServlet.se ...

  7. 前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并把请求分发到不同的控制器去处理,根据控制器处理后的结果,生成相应的响应发送到客户端。前端控制器既可以使用Filter实现(Struts2采用这种方式),也可以使用Servlet来实现(spring MVC框架)。

    本文转自http://www.cnblogs.com/davidwang456/p/4090058.html 感谢作者 前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并 ...

  8. Spring mvc 启动 和 请求分发

    Spring mvc 启动 和 请求分发 启动加载: abstract class HttpServletBean extends HttpServlet void init() initServle ...

  9. nginx 请求限制

    1.nginx 请求限制 1.连接频率限制 - limit_conn_module 2.请求频率限制 - limit_req_module 连接限制的语法 请求限制的语法 limit_conn_zon ...

随机推荐

  1. Twisted & Treq

    1. Install treq:pip install treq 2. If twisted install failed, please reinstall itpip install twiste ...

  2. 微服务的脚手架Jhipster使用(一)

    随着微服务的普及以及docker容器的广泛应用,有传统的soa服务衍生出微服务的概念,微服务强调的是服务的独立性,屏蔽底层物理平台的差异,此时你会发现微服务跟容器技术完美契合.在此基础上衍生出的云原生 ...

  3. Elasticsearch 在CentOs7 环境中开机启动

    由于园区的电源不是很稳定,经常会断电,断电之后几十台服务器,启动服务都要人肉启动,真是非常蠢的行为: 开机自启动服务就很有必要,之前设置过,后来没有成功就不管了,断电好几次之后,意识到这个问题就很严重 ...

  4. dataset的find查找功能使用

    var record = dataset.find(["status"],[curstatus]); //status指的是dataset中的某个字段,curstatus指的是指定 ...

  5. python读入txt数据,并转成矩阵

    本文参考:<机器学习算法原理与编程实践>郑捷,第1章第四节 本文程序中使用的txt数据截图如下图.数据链接:https://pan.baidu.com/s/1_Ce6WLGDTWf7qQI ...

  6. Crunch黑客神器-创造个性字典

    先来看第一个命令: crunch 6 7 123456 -o pass.txt 是什么意思呢?我们打开终端,输入这个命令之后,crunch代表使用crunch这个工具,6代表生成的密码最小是6位数,7 ...

  7. 【POJ - 3641】Pseudoprime numbers (快速幂)

    Pseudoprime numbers Descriptions 费马定理指出,对于任意的素数 p 和任意的整数 a > 1,满足 ap = a (mod p) .也就是说,a的 p 次幂除以  ...

  8. 【VS开发】OpenCV2:Mat属性type,depth,step

    OpenCV2:Mat属性type,depth,step 在OpenCV2中Mat类无疑使占据着核心地位的,前段时间初学OpenCV2时对Mat类有了个初步的了解,见OpenCV2:Mat初学.这几天 ...

  9. teach-es6-1

    ------------------------------------------------------------------------字符串连接: 之前: var str=''; var s ...

  10. SpringMVC 零配置 无web.xml

    对SpringMVC启动流程的讲解 https://www.cnblogs.com/beiyan/p/5942741.html 与SpringMVC的整合 https://hanqunfeng.ite ...