`
冰糖葫芦
  • 浏览: 297860 次
社区版块
存档分类
最新评论

nginx介绍(一) 简介篇

阅读更多

 

Nginx(发音为“engine x)是一款由俄罗斯软件工程师Igor Sysoev写的开源的web服务器。自从2004年发布以来nginx一直关注于高性能、高并发、低内存的使用,另外还有一些特色的Web服务器功能,如负载均衡、缓存、访问和带宽控制以及能够有效的与各种应用集成这些特点使得nginx成为现代网站架构中一个不错的选择。目前,nginx在互联网最受欢迎web服务器软件排行榜上排名第二。

1. 为什么高并发如此重要?

目前互联网是如此普及和无处不在,而我们知道,这在10年前是很难想象的。而且,由于从基于NCAS(译者注:国家超级计算机应用中心)的简单的HTML产生可点击文本到基于Apache web服务的重大演变,使得互联网成为全球2亿网民的常用沟通媒介。随着电脑、移动设备和最近的平板电脑的永久扩散连接,导致互谅网领域变化非常迅速以及整个经济的有线数字化。线上服务也随着生活和娱乐资讯的实时有效而变得更加细致。而且线上业务的安全方面也发生了重大变化。因此网站也变得比以前更加复杂,也就需要更多工程方面的工作使互联网更加健壮以及具有更好的扩展性。

对一个网站架构来说最大的挑战就是并发问题。从网络服务一开始,并发级别就在持续不断的增长。而一个网站同时为成百上千甚至是几百万用户同时服务的情况也并不少见。十年以前,导致并发的原因是客户端慢-当时用户使用ADSL或者拨号上网来连接;如今,并发是由移动客户端和一些需要通过持久连接来更新新闻、推特、朋友消息等的更新应用程序体系结构的组合。另外还一个造成并发增加的因素是现代浏览器同时为一个网站打开46个连接来加载网页以提高页面加载速度。

为了说明客户端慢时存在的问题,假设有一个简单的基于apacheweb服务可以产生一个100k大小的响应文本或者图片,那么这个服务只用花几分之一秒就能生成或者查询出这个页面,但是在一个有80kbps(10kB/s)带宽的客户端中却需要10秒钟来发送这个请求;本来这个web服务可以很快拉到100k的内容,但是却要在花费10秒钟传送完这100k的内容后才能释放这个连接。现在我们假设有1000个同时连接上的客户端来请求相似的内容,如果一个客户端被分配到1M的额外内存,那么为了满足这1000客户端100K的请求则需要1000M(大约1G)的额外内存。实际上,一个基于apache的标准web服务通常要为每个连接分配大于1M的内存,而且可悲的是移动通信的有效速率却仅为数十kpbs。虽然可能通过操作系统内核的socket缓冲在一定程度上可以缓解向比较慢的客户端发送内容的问题,但是总归不是通用的解决办法而且可能有不可预期的负面效果。

在对于持久连接的处理上使得并发问题变得更加突出,这是因为要避免重新创建http连接带来的延迟,客户端要一直保持与web服务器连接而且web服务还要为每个连接分配额外的内存空间。

因此,为了能够并且能够持续性处理随着日益增加的用户量而导致的不断增加的负载以及获得更高的并发性,一个网站必须基于一系列非常高性能的模块来构建。但是,其他部分如硬件(CPU,内存,硬盘)、网络容量、应用程序和数据存储架构显然也是同样重要的,它决定了web服务器可接受和处理的客户端连接数。所以web服务器需要能够通过非线性扩展来满足每秒钟不断增长的并发连接和请求数。

Apache是否合适?

Apache,起源于二十世纪九十年代初,目前仍是互联网上占主导地位的web服务器软件。从2000年开始,很明显的单机web服务很难通过简单的复制来满足不断增长的网络服务。尽管apache为未来开发提供了一个坚实的基础,但它为每个新连接来做一次自我复制的架构并不能满足一个网站非线性扩展的要求。最终,apache成了一个功能齐全、有一系列第三方插件而且几乎普遍普遍适用于任何类型二次开发的网站的web服务器。但是这样重并没有任何好处,而且这样做的缺点是将如此多的功能和工具组合到一个软件中也会增加每个连接的 cpu和内存占用率从而降低软件的可扩展性。

因此,既然服务器硬件、操作系统、网络资源不再是限制网站成长的主要因素,世界各地的开发者们也开始寻求更加有效的方法来运行web服务器。大概在十年前,一位著名软件工程师Daniel Kegel声称“现在对于web服务器来说是时候只是上万并发请求了”而且还预测了我们现在称之为互联网云服务的东西。Kegel的C10K清单里也进行了一些对web服务器最佳状态下并发连接数问题的尝试解决,最终证明nginx是最有效的解决途径。

为了解决C10K清单上同时10000连接数的问题,nginx考虑采用的不同架构方式-一个在并发连接数和每秒请求数都更适合非线性扩展的架构。由于 nginx基于事件模型,所以它并不遵循apache复制每个新的进程或者为每个页面创建单独线程的规则。结果,即使负载的增加,内存和CPU使用率仍然可控,这也使得nginx在一台服务器上通过普通硬件就可以处理数万并发请求。

nginx 第一个版本的发布是为了对基于apache的应用服务器中部署在apache下的静态内容,比如html,css,javascript脚本以及图片可以通过nginx来卸载并发和超时处理。在其发展过程中,nginx通过使用FastCGI、uswgi 或者SCGI协议实现了与第三方应用的集成,而且具有像memcache这样的分布式对象缓存系统。同时还增加了一些有用的功能,例如含有负载均衡机制的反向代理以及缓存等。这些额外的特色功能使nginx成为构建一个基于可伸缩web基础设施的有效工具的组合。

使用nginx时候还有更多优势?

通常高效、高性能的处理大并发请求是nginx最主要的优势,同时,使用nginx还有一些其他好处。

在过去的几年里,网络架构师们已经接受了松耦合的思想并开始从web服务中将应用的基础组件分离出来。然而,之前已经存在的基于 LAMP(Linux,Apache,MYSQL,PHP,Python或者Perl)的网站,现在可能包括不仅仅基于LEMP(E发音为“engine x”)的网站却在实际中越来越经常的需要将web服务器推到基础设施的边缘地带或者需要通过不同的方式将相同的或者一些新的应用以及数据工具整合起来。

对于以上情况来说nginx非常适合,这是因为nginx从应用层到更高效的边缘服务器(译者注:不熟悉的读者可查询边缘服务器)层提供了一些主要功能例如卸载并发、超时处理、SSL(安全套接层)、内容静态化、压缩和缓存、连接数和请求的节流甚至是HTTP流媒体。同时nginx还可以直接和 memcached、Redis以及其他的NoSQL解决方案来提高大并发用户下的性能。

随着最新的开放工具组件和编程语言的流行,越来越多的公司开始改变他们开发和部署应用的习惯。而nginx也已经成为这类改变的典范,发展为最重要的组件之一,同时它也已经帮助许多公司在预算范围内来实现web服务持续快速的发展。

nginx的第一行代码写于2002年,到2004年nginx通过2-two-clause BSD许可协议发布。自从nginx发布以来,它的用户群一直持续增长,并且贡献各种想法以及提交bug、提出各种意见和建议为整个社区提供了非常大的帮助。

nginx 的代码库是原创的,而且完全通过C语言来实现。它也已经被移植到多种架构下的操作系统中,比如Linux, FreeBSD, Solaris, Mac OS X, AIX 和Windows系统。nginx也有自己的库,而且这些库并没有使用系统中不存在的C库,因此,除了zlib、PCRE和OpenSSL这几个库之外,用户可以去掉自己不需要或者可能有许可冲突的库。

这里稍微说一下windows版本的nginx。运行在windows下的nginx更像是一个概念验证而不是一个功能齐全的端口。在windows下 nginx也是有限制的,那就是nginx不能很好的和windows内核兼容,已经知道的低版本的nginx在windows的问题有支持并发数少、性能低、缓存失效以及带宽策略失效。今后,windows版本nginx将更加匹配主流功能。

 

(未完,待续。。。)

 

1. 本文由程序员学架构译,mathew同学校审

2. 本文译自The Architecture of Open Source Applications

3. 转载请务必注明本文出自程序员学架构(微信号:archleaner )

4. 更多文章请扫码:

  • 大小: 38.7 KB
分享到:
评论
2 楼 冰糖葫芦 2014-10-06  
linginfanta 写道
这才是真正的干货啊。

谢谢,我们会继续努力为大家提供优质文章,大家顶起来,努力做一名懂架构的程序员
1 楼 linginfanta 2014-10-06  
这才是真正的干货啊。

相关推荐

    Nginx开发从入门到精通

    - **Nginx历史**:Nginx最初由Igor Sysoev编写,用于解决著名的C10K问题(即一个Web服务器如何高效地处理成千上万个并发连接),自2004年发布以来,Nginx迅速成为最受欢迎的Web服务器之一。 - **使用简介**:Nginx以...

    nginx离线安装包.zip

    本篇将详细介绍如何在无网络环境下安装Nginx,主要涉及的核心知识点包括Nginx的离线安装过程、依赖包的获取和配置。 **一、Nginx简介** Nginx 是一个高性能的 HTTP 和反向代理服务器,广泛用于网站的负载均衡和...

    决战Nginx: 系统卷 - 高性能Web服务器详解与运维.zip

     在第二部分中,通过具体使用实例讲述了Nginx的模块(包括官方模块和第三方模块),并详细介绍了充分使用Nginx的方式方法。同时在这里使用了Heartbeat服务实现Nginx服务器的高可用。 《决战Nginx系统卷:高性能Web...

    Nginx从入门到精通

    #### 一、Nginx概述 - **Nginx历史**:Nginx是由俄罗斯程序员Igor Sysoev在2004年开始开发的一款高性能HTTP和反向代理Web服务器软件。自发布以来,因其出色的性能表现和稳定性,迅速成为全球广泛使用的Web服务器之...

    nginx-rtmp流媒体服务器

    本篇文章将详细介绍如何在Windows环境下编译Nginx 1.21.4版本,并结合nginx-http-flv-module 1.2.9模块,搭建一个功能完备的流媒体服务器。 **一、Nginx简介** Nginx是一款高性能的HTTP和反向代理服务器,同时也是...

    决战Nginx: 系统卷 - 高性能Web服务器详解与运维.z01

     在第二部分中,通过具体使用实例讲述了Nginx的模块(包括官方模块和第三方模块),并详细介绍了充分使用Nginx的方式方法。同时在这里使用了Heartbeat服务实现Nginx服务器的高可用。 《决战Nginx系统卷:高性能Web...

    实战Nginx:取代Apache的高性能Web服务器

     本书主要分为4个部分,第1部分为基础篇,介绍了Nginx服务器的安装与配置方法;第2部分为进阶篇,重点介绍了Nginx的配置优化方法、Nginx与PHP/Ruby/Python/JSP/Perl/Memcached的结合配置方法、Nginx HTTP反向代理与...

    Nginx安装包

    这其中原因是当nginx将请求转发到tomcat2时,服务器当然能做出立即性响应,但要是转到了tomcat1,就会出现一段长达1分多钟的等待响应过程,这显然我们是不能接受的。对此我们需要对ngin配置进行写修改。在这里先介绍...

    Centos7配置fastdfs和nginx分布式文件存储系统实现过程解析

    本篇文章将详细介绍如何在CentOS7操作系统上配置FastDFS以及Nginx,搭建一个分布式文件存储解决方案。 1. **FastDFS简介** FastDFS是一个高性能的开源分布式文件系统,它对文件进行管理,包括文件存储、文件同步、...

    docker-django-nginx-uwsgi-postgres-tutorial:Docker + Django + Nginx + uWSGI + Postgres基本教学-从无到有(Docker + Django + Nginx + uWSGI + Postgres教程)

    docker-django-nginx-uwsgi-postgres-tutorial Docker + Django + Nginx + uWSGI + Postgres基本教学-从无到有教你用建立 + + + :memo:建议对还不熟的朋友,可以先参考我之前写的简介之前介绍过了,这边就不在介绍 :...

    high-performance-nginx-tls-tuning:高性能Nginx TLS调优

    这篇文章中,我们先介绍Nginx中的TLS设置有什么与请求延迟可能相关,如何调整才能实现加速。然后我们用优化Nginx服务器的实例来分享如何调整Nginx TLS / SSL设置,为首次搜索的用户提速30%左右。我们会详细讨论每...

    鸟哥的Linus私房菜---基础篇+服务器篇完整版pdf

    《鸟哥的Linux私房菜》是一本深受Linux爱好者欢迎的入门教材,它分为基础学习篇和服务器篇,全面地介绍了Linux操作系统的核心概念、基本操作以及服务器管理的相关知识。这本书对于初学者来说,是理解Linux系统及其...

    linux下安装nginx(图文教程)

    #### 一、Nginx简介 Nginx是一款轻量级的Web服务器,以其占用内存少、并发处理能力强的特点而闻名。它能够高效地处理大量的并发连接请求,适用于搭建高性能网站服务器。本文将详细介绍如何在Linux环境下安装并配置...

    Linux服务器下安装配置Nginx的教程

    本教程旨在详细介绍如何在Linux服务器环境下安装并配置Nginx,以确保其能够顺利运行,并实现高效的网络服务。 #### 二、Nginx简介 Nginx不仅可以作为一个独立的Web服务器使用,还可以作为负载均衡器和反向代理...

    鸟哥的私房菜 基础篇和服务器篇 第三版

    1. **Linux简介**:介绍Linux的历史、发行版和哲学,让读者对Linux有一个基本的认识。 2. **Linux安装**:详述各种安装方式,如图形化安装、文本模式安装等,以及安装过程中的注意事项。 3. **Linux文件系统**:讲解...

    OpenResty-Best-Practices.pdf

    #### 一、OpenResty简介 **OpenResty** 是一个基于 Nginx 与 Lua 的高性能 Web 平台,它使得开发人员能够轻松地编写出高性能、可扩展的 Web 应用程序和服务。通过结合 Nginx 强大的 HTTP 服务器功能和 Lua 的脚本...

    阿铭Linux基础篇+服务器篇

    1. **Linux简介**:介绍Linux的历史、发展背景、开源理念以及与Unix的关系,使学习者理解Linux操作系统的基本概念。 2. **Linux发行版**:讲解不同类型的Linux发行版,如Ubuntu、CentOS、Red Hat Enterprise Linux...

    鸟哥Linux私房菜服务器篇教学视频

    ### 一、鸟哥Linux私房菜简介 “鸟哥Linux私房菜”是一系列非常受欢迎的Linux学习教程,它由一位昵称为“鸟哥”的资深Linux专家撰写和制作。该系列教程以其生动有趣、易于理解的特点而闻名,被广大Linux爱好者视为...

    linux运维.pdf

    - **Nginx介绍**:Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。 - **配置要点**:安装Nginx软件包,配置虚拟主机,优化Nginx性能,理解和配置重写规则。 ##### 5.3 Tomcat/...

Global site tag (gtag.js) - Google Analytics