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. Linux新增开放端口

    CentOS系统 开放端口的方法: 方法一:命令行方式               1. 开放端口命令: /sbin/iptables -I INPUT -p tcp --dport 8080 -j ...

  2. GWO(灰狼优化)算法MATLAB源码逐行中文注解(转载)

    以优化SVM算法的参数c和g为例,对GWO算法MATLAB源码进行了逐行中文注解. tic % 计时器 %% 清空环境变量 close all clear clc format compact %% ...

  3. mysql8修改密码问题

    查看初始密码: grep "temporary password" /var/log/mysqld.log 查看validate_password变量 SHOW VARIABLES ...

  4. androidstudio的安装与抓log

    公司新开发的软件是基于unity的,我们被告知unity是不允许charles抓包的,故此只能只用 Android   studio 一. Android    studio的安装与配置 在此我就不赘 ...

  5. mysql注入语句

    一.sql注入语句 爆破所有数据库: (select group_concat(schema_name) from information_schema.schemata) 获取数据库所有表: (se ...

  6. 论文阅读及复现 | Effective Neural Solution for Multi-Criteria Word Segmentation

    主要思想 这篇文章主要是利用多个标准进行中文分词,和之前复旦的那篇文章比,它的方法更简洁,不需要复杂的结构,但比之前的方法更有效. 方法 堆叠的LSTM,最上层是CRF. 最底层是字符集的Bi-LST ...

  7. POJ3450最长公共子串【kmp】

    题目链接:http://poj.org/problem?id=3450 题目大意:给定n个长度不超过200的字符串,n < 4000.求这些字符串的最长公共子串,若没有,则输出 “IDENTIT ...

  8. [转帖]传输层安全协议TLS 1.3 RFC 8446使互联网更快、更安全

    传输层安全协议TLS 1.3 RFC 8446使互联网更快.更安全 2018-08-12 11:38:19作者:LINUX人稿源:开源社区 https://ywnz.com/linuxyffq/261 ...

  9. Java笔记1: 输入输出与变量常量

    输入方法 nextLine 以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符. 可以获得空白的一串字符. import java.util.Scanner; pu ...

  10. PHPstorm配置同步服务器文件

    一.配置服务器 1.连接配置 打开菜单栏 Tools -> Deployment -> Configuration 点击 + 选择 SFTP,并填写相关服务器信息: Type:连接类型,这 ...