原文:https://book.2cto.com/201304/19609.html

人们在了解新事物时,往往习惯通过类比来帮助自己理解事物的概貌。那么,我们在学习Nginx时也采用同样的方式,先来看看Nginx的竞争对手—Apache、Lighttpd、Tomcat、Jetty、IIS,它们都是Web服务器,或者叫做WWW(World Wide Web)服务器,相应地也都具备Web服务器的基本功能:基于REST架构风格,以统一资源描述符(Uniform Resource Identifier,URI)或者统一资源定位符(Uniform Resource Locator,URL)作为沟通依据,通过HTTP为浏览器等客户端程序提供各种网络服务。然而,由于这些Web服务器在设计阶段就受到许多局限,例如当时的互联网用户规模、网络带宽、产品特点等局限,并且各自的定位与发展方向都不尽相同,使得每一款Web服务器的特点与应用场合都很鲜明。

Tomcat和Jetty面向Java语言,先天就是重量级的Web服务器,它的性能与Nginx没有可比性,这里略过。

IIS只能在Windows操作系统上运行。Windows作为服务器在稳定性与其他一些性能上都不如类UNIX操作系统,因此,在需要高性能Web服务器的场合下,IIS可能会被“冷落”。

Apache的发展时期很长,而且是目前毫无争议的世界第一大Web服务器,图1-1中是12年来(2010~2012年)世界Web服务器的使用排名情况。

从图1-1中可以看出,Apache目前处于领先地位。

Apache有许多优点,如稳定、开源、跨平台等,但它出现的时间太长了,在它兴起的年代,互联网的产业规模远远比不上今天,所以它被设计成了一个重量级的、不支持高并发的Web服务器。在Apache服务器上,如果有数以万计的并发HTTP请求同时访问,就会导致服务器上消耗大量内存,操作系统内核对成百上千的Apache进程做进程间切换也会消耗大量CPU资源,并导致HTTP请求的平均响应速度降低,这些都决定了Apache不可能成为高性能Web服务器,这也促使了Lighttpd和Nginx的出现。观察图1-1中Nginx成长的曲线,体会一下Nginx抢占市场时的“咄咄逼人”吧。

Lighttpd和Nginx一样,都是轻量级、高性能的Web服务器,欧美的业界开发者比较钟爱Lighttpd,而国内的公司更青睐Nginx,Lighttpd使用得比较少。

在了解了Nginx的竞争对手之后,相信大家对Nginx也有了直观感受,下面让我们来正式地认识一下Nginx吧。

提示Nginx发音:engine ['nd3In] X。

来自俄罗斯的Igor Sysoev在为Rambler Media(http://www.rambler.ru/)工作期间,使用C语言开发了Nginx。Nginx作为Web服务器,一直为俄罗斯著名的门户网站Rambler Media提供着出色、稳定的服务。

Igor Sysoev将Nginx的代码开源,并且赋予其最自由的2-clause BSD-like license许可证。由于Nginx使用基于事件驱动的架构能够并发处理百万级别的TCP连接,高度模块化的设计和自由的许可证使得扩展Nginx功能的第三方模块层出不穷,而且优秀的设计带来了极佳的稳定性,因此其作为Web服务器被广泛应用到大流量的网站上,包括腾讯、新浪、网易、淘宝等访问量巨大的网站。

2012年2月和3月Netcraft对Web服务器的调查如表1-1所示,可以看出,Nginx的市场份额越来越大。

表1-1 Netcraft对于Web服务器市场占有率前4位软件的调查(2012年2月和3月)
Web服务器 2012年2月 市场占有率 2012年3月 市场占有率 占有率变化
Apache 106 664 061 57.45% 108 035 584 57.46% 0.01
Nginx 23 590 737 12.71% 24 011 199 12.77% 0.06
Microsoft IIS 22 363 730 12.05% 22 537 872 11.99% –0.06
Google Web Server 14 316 485 7.71% 14 438 358 7.68% –0.03

Nginx是一个跨平台的Web服务器,可运行在Linux、FreeBSD、Solaris、AIX、Mac OS、Windows等操作系统上,并且它还可以使用当前操作系统特有的一些高效API来提高自己的性能。

例如,对于高效处理大规模并发连接,它支持Linux上的epoll(epoll是Linux上处理大并发网络连接的利器,9.6.1节中将会详细说明epoll的工作原理)、Solaris上的event ports和FreeBSD上的kqueue等。

又如,对于Linux,Nginx支持其独有的 sendfile系统调用,这个系统调用可以高效地把硬盘中的数据发送到网络上(不需要先把硬盘数据复制到用户态内存上再发送),这极大地减少了内核态与用户态数据间的复制动作。

种种迹象都表明,Nginx以性能为王。

2011年7月,Nginx正式成立公司,由Igor Sysoev担任CTO,立足于提供商业级的Web服务器。

最新文章

  1. 备忘-Sql server Timeout expired 超时时间已到. 达到了最大池大小 错误及Max Pool Size设置
  2. hdu 4741 2013杭州赛区网络赛 dfs ***
  3. poj2184 01背包变形,价值为可为负数
  4. 为WPF和Silverlight的Grid添加边框线(zz)
  5. Go 性能分析
  6. OpenCV3编程入门笔记(4)腐蚀、膨胀、开闭运算、漫水填充、金字塔、阈值化、霍夫变换
  7. web端/h5端账号密码的安全性问题
  8. phpcms网站搬家 至 服务器 完整并且详细过程
  9. 宇宙探索特工队&scrum
  10. Java的序列化和反序列化
  11. mongodb副本集实现
  12. Ubuntu宿主机与VMware中其他系统虚拟机的互通
  13. 汇编语言--微机CPU的指令系统(五)(标志位操作指令)
  14. 网络 --- 1 c/s (b/s)架构 ip 初始socket
  15. Nginx 的 docker 部署
  16. SharePoint 删除废弃站点步骤
  17. HBase 架构与工作原理2 - HBase 组件
  18. cocos2dx ui显示机制
  19. [node.js]express+mongoose+mongodb的开发笔记
  20. 如果没有指定Cookie的时效,那么默认的时效是。(选择1项)

热门文章

  1. windows 下mysql 重设root密码方法
  2. nginx 配置后网站图片加载出来一半或者不出来
  3. AE与C#入门笔记
  4. java了解哪些锁
  5. 【1】【JUC】JDK1.8源码分析之ReentrantLock
  6. "飞机大战"游戏_Java
  7. JSON与对象的相互转换
  8. Error: failed to execute 'C:\Keil\ARM\ARMCC'的解决办法
  9. modbus-vcr介绍
  10. 20155306 2016-2017-2 《Java程序设计》第九周学习总结