Nginx架构介绍

Nginx(发音为“ engine x”)是由俄罗斯软件工程师Igor Sysoev编写的免费开源Web服务器 。自2004年公开发布以来,nginx一直致力于高性能,高并发性和低内存使用率 。Web服务器功能之上的其他功能,例如负载平衡,缓存,访问和带宽控制,以及与各种应用程序高效集成的能力,已使Nginx成为现代网站体系结构的理想选择 。当前,nginx是Internet上第二受欢迎的开源Web服务器 。
为什么高并发很重要?如今,互联网是如此的广泛和无所不在,很难想象十年前它并不完全存在 。它已经从基于NCSA的简单html产生可点击文本,然后基于Apache Web服务器发展到了始终在线的通信介质,该通信介质已被全世界超过20亿用户使用 。随着永久连接的PC,移动设备和最近的平板电脑的普及,互联网格局正在迅速变化,整个经济体已经实现了数字化连接 。在线服务变得更加复杂,并且对即时可用的实时信息和娱乐有明显的偏见 。运行在线业务的安全性方面也已发生重大变化 。因此,网站现在比以前复杂得多,
并发一直是网站架构师面临的最大挑战之一 。自Web服务开始以来,并发水平一直在不断提高 。一个受欢迎的网站为成千上万甚至数百万的同时用户提供服务的情况并不少见 。十年前,并发的主要原因是客户端速度较慢,即具有ADSL或拨号连接的用户 。如今,并发是由移动客户端和较新的应用程序体系结构的结合引起的,这些体系结构通常基于维护持久性连接,该持久性连接允许使用新闻,推文,朋友供稿等更新客户端 。导致并发性增加的另一个重要因素是现代浏览器的行为发生了变化,现代浏览器打开了网站的四到六个同时连接,以提高页面加载速度 。
为了说明客户端速度慢的问题,请想象一个简单的基于Apache的Web服务器,它会产生相对较短的100 KB响应,即带有文本或图像的Web页面 。生成或检索此页面仅需不到一秒钟的时间,但是将其传输到带宽为80 kbps(10 KB / s)的客户端需要10秒钟 。从本质上讲,Web服务器将相对快速地提取100 KB的内容,然后在繁忙的10秒钟之内缓慢地将此内容发送到客户端,然后再释放其连接 。现在,假设您有1,000个同时连接的客户端,他们请求了类似的内容 。如果每个客户端仅分配1 MB的额外内存,则将导致1000 MB(约1 GB)的额外内存专用于仅为1000个客户端提供100 KB的内容 。事实上,典型的基于Apache的Web服务器通常为每个连接分配超过1 MB的额外内存,令人遗憾的是,数十kbps仍然经常是移动通信的有效速度 。尽管可以通过增加操作系统内核套接字缓冲区的大小在某种程度上改善将内容发送到速度较慢的客户端的情况,但这并不是解决问题的一般方法,并且可能会带来不良的副作用 。
对于持久连接,处理并发性的问题更加明显,因为要避免与建立新的HTTP连接相关的延迟,客户端将保持连接状态,并且对于每个连接的客户端,Web服务器都会分配一定数量的内存 。
因此,为了处理与不断增长的受众相关的工作量增加以及更高级别的并发性并能够持续做到这一点,网站应基于许多非常有效的构建基块 。虽然等式的其他部分(例如硬件(CPU,内存,磁盘),网络容量,应用程序和数据存储体系结构)很重要,但在Web服务器软件中,接受并处理了客户端连接 。因此,Web服务器应该能够随着每秒同时发生的连接和请求数量的增长而非线性扩展 。
Apache不适合吗Apache,至今仍在互联网上占主导地位的Web服务器软件,其起源可追溯到1990年代初 。最初,它的体系结构与当时存在的操作系统和硬件相匹配,但也与Internet的状态相匹配,在Internet上,网站通常是运行单个Apache实例的独立物理服务器 。到2000年代初,很明显,无法轻松地复制独立的Web服务器模型来满足不断增长的Web服务的需求 。尽管Apache为将来的开发提供了坚实的基础,但它的架构是为每个新连接生成自己的副本,这不适用于网站的非线性可伸缩性 。最终,Apache成为了通用Web服务器,致力于提供许多不同的功能,各种第三方扩展,以及对几乎任何类型的Web应用程序开发的普遍适用性 。但是,价格不菲,而且在单个软件中拥有如此丰富而通用的工具组合的缺点是可伸缩性较差,这是因为每个连接的CPU和内存使用量增加了 。
因此,当服务器硬件,操作系统和网络资源不再是网站增长的主要限制时,全世界的Web开发人员开始四处寻找运行Web服务器的更有效方法 。大约十年前,著名的软件工程师Daniel Kegel宣称“现在是Web服务器同时处理一万个客户端的时候了”,并预测了我们现在所说的Internet云服务 。凯格尔(Kegel)的C10K清单激发了许多尝试来解决Web服务器优化问题,以同时处理大量客户端,而Nginx证明是最成功的解决方案之一 。


推荐阅读