当前位置:首页 > 技术文章 > 正文内容

Nginx如何实现高并发?原理深度解析!

arlanguage3个月前 (01-29)技术文章26

Nginx是高并发架构的必备中间件,也是大厂必备技能,下面我就重点详解Nginx高并发架构关键技术@mikechen

本文作者:陈睿|mikechen

文章来源:mikechen.cc

Nginx

Nginx是一款高性能负载均衡器,其出色的性能使其在互联网行业得到了广泛应用。

Nginx 通过采用 异步非阻塞 I/O 模型、 和 I/O 多路复用 技术,成功解决了高并发场景下的性能瓶颈问题。

Nginx事件驱动

Nginx 的工作进程通过 事件驱动 来管理多个连接,整体架构如下图所示:

每当一个请求到来时,Nginx 不会为其分配一个新的线程或进程,而是将该请求交给一个事件循环(event loop)来处理。

这是一个无限循环,不断地检查是否有新的事件,比如:请求到达、数据可读、数据可写...等。

当检测到某个事件发生时,例如:一个请求已经完成了数据的读取,Nginx 就会对其进行处理。

Nginx 的每个工作进程,只处理一个事件循环,因此它不会因为一个连接的处理而阻塞其他连接的处理,能同时管理数以万计的连接。

非阻塞 I/O

Nginx 采用 非阻塞 I/O 来与操作系统进行交互,由于不会阻塞在单个 I/O 操作上,Nginx 可以同时处理大量的并发连接。

传统的 I/O 操作通常是阻塞的,即当一个进程发起 I/O 请求后,会一直等待 I/O 操作完成,在此期间进程无法执行其他任务。

这对于需要处理大量并发连接的服务器来说,效率是非常低的。

非阻塞 I/O 则不同,当一个进程发起 I/O 请求后,它不会一直等待,而是立即返回。

如果 I/O 操作还没有完成,进程可以继续执行其他任务,当 I/O 操作完成时,操作系统会通知进程,进程再进行后续处理。

例如:当 Nginx 需要从磁盘读取静态文件时,如果文件尚未准备好,Nginx 不会等待它,而是将该请求放入等待队列,继续处理其他请求。

I/O 多路复用

Nginx 使用 I/O 多路复用, 技术来同时处理多个并发连接。

通过 I/O 多路复用,Nginx 可以在同一个线程中同时管理成千上万的连接,而不需要为每个连接创建一个新的线程、或进程。

多路复用的关键:是通过单一线程同时处理多个 I/O 操作,避免了为每个请求创建新线程、或进程的开销。

Nginx 使用 I/O 多路复用技术,如: Linux 上的 “epoll”。

“epoll”可以同时监听多个文件描述符,比如:网络连接、文件...等的 I/O 事件。

当某个文件描述符准备好进行 I/O 操作时,epoll 会通知 Nginx,Nginx 就可以进行相应的处理。

这种设计使得 Nginx 能够高效地处理大量的 HTTP 请求,使其在互联网行业得到了广泛应用。

本文作者:陈睿|mikechen

文章来源:mikechen.cc

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/1154.html

分享给朋友:

“Nginx如何实现高并发?原理深度解析!” 的相关文章

16《Nginx 入门教程》Nginx防盗链配置

百度百科的解释如下:盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益。盗链在如今的互联网世界无处不在...

Java 加密解密和数字签名

在做项目中,只要涉及敏感信息,或者对安全有一定要求的场景,都需要对数据进行加密。在Java中原生API即可实现对称加密与非对称加密,并支持常用的加密算法。对称加密对称加密使用单钥完成加解密,加密和解密采用相同的密钥。对称加密的速度快,常用于大量数据进行加密。主流的算法有:AES,3DES。生成3DE...

如何让Nginx后端服务收到真实的客户IP?

背景开发有一个服务部署在阿里云上,依赖阿里云的CLB(传统型负载均衡)暴露服务,因特殊要求,CLB和后端服务之间需要通过自建Nginx做代理,拓扑图如下,应用拓扑操作客户端的请求经过了两层代理,这里CLB和Nginx都要做配置。1,配置CLBCLB的配置比较简单,在配置“监听”时,要附加“X-For...

PHP日志记录

背景在生产环境中日志的重要性显而易见,能快速定位问题和程序的调优。在LNMP架构中怎么记录好程序中的错误日志。设置error_log记录PHP日志信息#将会向PHP报告发生的每个错误 error_reporting = E_ALL #关闭页面显示才能将错误回写到日志文件 display_err...

我采访了一位 Pornhub 工程师,聊了这些纯纯的话题

成人网站在推动 Web 发展方面所起到的作用无可辩驳。从突破浏览器的视频能力限制,到利用 WebSocket 推送广告(防止被广告拦截器拦截),你必须不断想出各种聪明的办法,让自己处在 Web 技术创新的最前沿。最近,我有幸采访了大型成人网站 Pornhub 的一位 Web 开发工程师,了解了相关的...

容器中Nginx高并发参数调优实战 nginx并发量过高怎么处理

在容器化的微服务架构中,Nginx作为反向代理和负载均衡器,常常需要承担高并发访问的压力。当并发连接数超过Nginx可处理的上限时,就会出现新连接被丢弃的情况。本文将详细介绍如何发现和定位这个问题,并通过调整内核参数和Nginx配置来解决。一、问题现象某Web服务在高并发场景下,偶尔会出现部分请求无...