Nginx----请求分发中心

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,多应用于网络权限管控的场景,个人接触较多的即FQ使用的代理服务器。反向代理是代理来自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。这样的话就可以保证路由器的高可用了。

猜你喜欢

转载自www.cnblogs.com/beichenroot/p/10990968.html