当前位置: 首页 > news >正文

将Nginx 核心知识点扒了个底朝天(二)

Nginx 是如何实现高并发的?

如果一个 server 采用一个进程(或者线程)负责一个request的方式,那么进程数就是并发数。那么显而易见的,就是会有很多进程在等待中。等什么?最多的应该是等待网络传输。

而 Nginx 的异步非阻塞工作方式正是利用了这点等待的时间。在需要等待的时候,这些进程就空闲出来待命了。因此表现为少数几个进程就解决了大量的并发问题。

Nginx是如何利用的呢,简单来说:同样的 4 个进程,如果采用一个进程负责一个 request 的方式,那么,同时进来 4 个 request 之后,每个进程就负责其中一个,直至会话关闭。期间,如果有第 5 个request进来了。就无法及时反应了,因为 4 个进程都没干完活呢,因此,一般有个调度进程,每当新进来了一个 request ,就新开个进程来处理。

回想下,BIO 是不是存在酱紫的问题?

Nginx 不这样,每进来一个 request ,会有一个 worker 进程去处理。但不是全程的处理,处理到什么程度呢?处理到可能发生阻塞的地方,比如向上游(后端)服务器转发 request ,并等待请求返回。那么,这个处理的 worker 不会这么傻等着,他会在发送完请求后,注册一个事件:“如果 upstream 返回了,告诉我一声,我再接着干”。于是他就休息去了。此时,如果再有 request 进来,他就可以很快再按这种方式处理。而一旦上游服务器返回了,就会触发这个事件,worker 才会来接手,这个 request 才会接着往下走。

这就是为什么说,Nginx 基于事件模型。

由于 web server 的工作性质决定了每个 request 的大部份生命都是在网络传输中,实际上花费在 server 机器上的时间片不多。这是几个进程就解决高并发的秘密所在。即:

webserver 刚好属于网络 IO 密集型应用,不算是计算密集型。

异步,非阻塞,使用 epoll ,和大量细节处的优化。也正是 Nginx 之所以然的技术基石。

什么是正向代理?

一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。

客户端才能使用正向代理。正向代理总结就一句话:代理端代理的是客户端。例如说:我们使用的OpenVPN 等等。

什么是反向代理?

反向代理(Reverse Proxy)方式,是指以代理服务器来接受 Internet上的连接请求,然后将请求,发给内部网络上的服务器并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

反向代理总结就一句话:代理端代理的是服务端。

 

http://www.lryc.cn/news/12043.html

相关文章:

  • 【PowerQuery】PowerBI 的PowerQuery支持的数据集成
  • scipy spatial transform Rotation库的源代码
  • JAVA文件操作
  • 字符串匹配 - 模式预处理:BM 算法 (Boyer-Moore)
  • RV1126笔记三十:freetype显示矢量字体
  • polkit pkexec 本地提权漏洞修复方案
  • es-06聚合查询
  • 面试知识点准备与总结——(并发篇)
  • Django框架之模型视图-URLconf
  • 操作系统闲谈06——进程管理
  • DaVinci 偏好设置:用户 - UI 设置
  • Nacos超简单-管理配置文件
  • 基于微信小程序的中国各地美食推荐平台小程序
  • 如何优雅的导出函数
  • c++多重继承
  • 15_FreeRtos计数信号量优先级翻转互斥信号量
  • 二叉树(一)
  • 【SCL】1200案例:天塔之光数码管显示液体混合水塔水位
  • 5.1配置IBGP和EBGP
  • c++中超级详细的一些知识,新手快来
  • [答疑]经营困难时期谈建模和伪创新-长点心和长点良心
  • 计算机基础知识
  • Java爬虫—WebMagic
  • [软件工程导论(第六版)]第2章 可行性研究(复习笔记)
  • Mac下安装Tomcat以及IDEA中的配置
  • 【Linux详解】——文件基础(I/O、文件描述符、重定向、缓冲区)
  • HomMat2d
  • Python3 JSON 数据解析
  • Homebrew 安装遇到的问题
  • Metasploit框架基础(二)