长尾关键词挖掘站长工具,php多语言网站怎么做,装修网站排名,中山软件开发定制nginx介绍 1.nginx 介绍2.nginx的优势3.Nginx VS Apache3.1.内核、语言、诞生时间比较3.2.功能比较3.3.Nginx 相对 apache 的优点 4.Nginx为什么有这么多的优势#xff1f;4.1.IO多路复用#xff08;I/O multiplexing【多并发】#xff09;4.2.nginx的驱动模型介绍4.3.nginx… nginx介绍 1.nginx 介绍2.nginx的优势3.Nginx VS Apache3.1.内核、语言、诞生时间比较3.2.功能比较3.3.Nginx 相对 apache 的优点 4.Nginx为什么有这么多的优势4.1.IO多路复用I/O multiplexing【多并发】4.2.nginx的驱动模型介绍4.3.nginx的异步非阻塞模式4.4.理解同步、异步、阻塞、非阻塞 1.nginx 介绍
Nginx (engine x) 是一个轻量级高性能的 HTTP 和 反向代理 服务也是一个IMAP/POP3/SMTP服务。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。其特点是占有内存少并发能力强事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
2.nginx的优势
Nginx 是一个高性能的 Web 和反向代理服务器它具有有很多非常优越的特性作为 Web 服务器相比 ApacheNginx 使用更少的资源支持更多的并发连接体现更高的效率这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应。作为负载均衡服务器可以进行自定义配置支持虚拟主机支持URL重定向支持网络监控支持流媒体传输等。Nginx 既可以在内部直接支持 Rails 和 PHP也可以支持作为 HTTP代理服务器对外进行服务。Nginx 用 C 编写不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。作为邮件代理服务器 Nginx 同时也是一个非常优秀的邮件代理服务器最早开发这个产品的目的之一也是作为邮件代理服务器。Nginx 安装非常的简单配置文件 非常简洁还能够支持perl语法Bugs非常少的服务器Nginx 启动特别容易并且几乎可以做到7*24不间断运行即使运行数个月也不需要重新启动。nginx还能够在不间断服务的情况下进行软件版本的升级。 nginx的优点 1、高并发高性能单机环境下参考服务器配置并发连接数在7000到8000左右。集群模式20000 2、高可靠。可以7*24小时不间断运行 3、可扩展性强。模块化设计使得添加模块非常的平稳。 4、支持热部署。可以在不停止服务器的情况下升级nginx 5、BSD许可证。nginx不止开源免费的我们还可以更具实际需求进行定制修改源代码 3.Nginx VS Apache
3.1.内核、语言、诞生时间比较
最大的区别事件驱动模型不一样nginx使用的是异步非阻塞模式apache使用的同步阻塞模式。
特性NginxApache请求管理事件驱动模型使用异步套接字处理占用较少的内存和CPU开销同步套接字、进程和线程每个请求都要使用一个单独的进程或线程使用同步套接字设计语言CC、C可移植性多平台多平台诞生时间20021994
3.2.功能比较
功能NginxApacheHTTPS支持作为模块支持作为模块支持虚拟主机原生支持原生支持CGI支持仅支持FastCGI支持CGI和FastCGI系统模块静态模块系统动态模块系统 FastCGI的介绍 快速通用网关接口Fast Common Gateway InterfaceFastCGI是通用网关接口CGI的改进描述了客户端和服务器程序之间传输数据的一种标准。 FastCGI致力于减少Web服务器与CGI程序之间互动的开销从而使服务器可以同时处理更多的Web请求。 与为每个请求创建一个新的进程不同FastCGI使用持续的进程来处理一连串的请求。这些进程由FastCGI进程管理器管理而不是web服务器。 从以上功能上的对比我们很难发现哪些功能Apache无法实现。 3.3.Nginx 相对 apache 的优点
轻量级同样是web服务器比Apache 占用更少的内存及资源apache采用的就是进程和线程模式工作来一个请求就开启一个进程或者线程大大的占用系统的资源开源免费费用静态处理性能强Nginx 静态处理性能比 Apache 高 3倍以上性能抗高并发Nginx是采用异步非阻塞来处理请求的而Apache则是阻塞型的。在高并发下Nginx 能保持低资源低消耗高性能。在ApachePHPprefork模式下如果PHP处理慢或者前端压力很大的情况下很容易出Apache进程数飙升从而出现拒绝服务的现象。高度模块化的设计编写模块相对简单功能多解决了强耦合的问题让代码依赖性变低变弱甚至是互不干扰的工作让我们定制软件提供了很大的便利就是可以自定义安装模快如果只使用3个模快你给我装20个模快那就浪费了我系统的资源。社区活跃各种高性能模块出品迅速可维护性成本低
4.Nginx为什么有这么多的优势
从技术层面深度剖析nginx程序的设计思想
4.1.IO多路复用I/O multiplexing【多并发】
多并发在生活中的案例超市收银口的收银员将每个收银口看成一个处理请求的线程当人数不多的时候开一个收银口一个收银员就能应付但是当人数多起来了一个收银口应付不来那么多人了对应的是海量的请求这时就需要开启多个收银口来应对大量的顾客而顾客则可以根据收银员的忙碌程度进程自由选择的排队
第一种方法就是最传统的多进程并发模型 (每进来一个新的I/O流会分配一个新的线程管理。) 第二种方法就是I/O多路复用 单个线程通过记录跟踪每个I/O流(sock)的状态来同时管理多个I/O流 发明它的原因是尽量多的提高服务器的吞吐能力。在同一个线程里面 通过拨开关的方式来同时传输多个I/O流
4.2.nginx的驱动模型介绍
一个请求到来了nginx使用epoll接收请求的过程是怎样的? selectpollepoll 都是I/O多路复用的具体的实现其实是他们出现是有先后顺序的。I/O多路复用这个概念被提出来以后 相继出现了多个方案但是都需要linux内核支持select是第一个实现 (1983 左右实现的)。 select 被实现以后很快就暴露出了很多问题。 select 任何一个sock(I/O stream)出现了数据select 仅仅会返回但是并不会告诉你是那个sock上有数据于是你只能自己一个一个的找10几个sock可能还好要是几万的#sock每次都找一遍就跟快递员送快递一样每次快递到了都得你自己去快递箱里面找可想而知多麻烦select 只能监视1024个链接。select 线程不是安全的。 于是14年以后(1997年一帮人又实现了poll, poll 修复了select的很多问题比如 poll 去掉了1024个链接的限制于是可以有多个连接进来。但是poll仍然线程不是安全的这就意味着不管服务器有多强悍也只能在一个线程里面处理一组I/O流。 epoll可以说是I/O 多路复用最新的一个实现epoll 修复了poll 和select绝大部分问题比如 epoll 现在是线程安全的。epoll 现在不仅告诉你sock组里面数据还会告诉你具体哪个sock有数据你不用自己去找了。 ngnix会有很多连接进来 默认采用epoll会把他们都监视起来然后像拨开关一样谁有数据就拨向谁然后调用相应的代码处理。 4.3.nginx的异步非阻塞模式
//查看服务器中nginx的worker进程
# yum -y install psmisc
# pstree |grep nginx|- 81666 root nginx: master process nginx| |--- 82500 nobody nginx: worker process| \--- 82501 nobody nginx: worker process
//1个master进程和n个work进程每进来一个request会有一个worker进程去处理。但不是全程的处理处理到什么程度呢 处理到可能发生阻塞的地方比如向上游后端服务器转发request并等待请求返回。 那么这个处理的worker不会这么一直等着他会在发送完请求后注册一个事件“如果upstream返回了告诉我一声我再接着干”。于是他就休息去了。这就是【异步】。 此时如果再有request 进来他就可以很快再按这种方式处理。这就是非阻塞和IO多路复用。而一旦上游服务器返回了就会触发这个事件worker才会来接手这个request才会接着往下走。这就是【异步回调】。 4.4.理解同步、异步、阻塞、非阻塞
当我们使用一个简单的读取文件的操作来举例说明
同步阻塞Synchronous Blocking 在同步阻塞模式下程序发起读取文件的请求后会一直等待文件读取完成期间无法进行其他操作。只有当文件读取完成后程序才能继续执行后续操作。异步阻塞Asynchronous Blocking 在异步阻塞模式下程序发起读取文件的请求后会立即返回并继续执行其他操作。但是程序会周期性地查询文件是否已经读取完成如果未完成则会一直等待直到文件读取完成后再继续执行后续操作。同步非阻塞Synchronous Non-blocking 在同步非阻塞模式下程序发起读取文件的请求后会立即返回并继续执行其他操作。程序会不断地轮询文件是否已经读取完成如果未完成则会立即返回并继续轮询直到文件读取完成后再继续执行后续操作。异步非阻塞Asynchronous Non-blocking 在异步非阻塞模式下程序发起读取文件的请求后会立即返回并继续执行其他操作。当文件读取完成后系统会通过回调函数或者事件通知的方式来通知程序文件已经读取完成程序再进行后续处理。
同步和异步是针对程序等待操作完成的方式阻塞和非阻塞是针对程序等待I/O操作完成的方式。