NGINX(发音为“engine x”)是一个开源、高性能的 HTTP 服务器和反向代理服务器。
自 2004 年公开发布以来,NGINX 一直专注于高性能、高并发和低内存使用率。2011 年,成立了 NGINX, Inc.,以帮助开发和维护开源发行版,并提供商业订阅和服务。在本文中,我将介绍 NGINX 开源版和 NGINX Plus,并告诉您如何参与社区。
在今年早些时候对 Opensource.com 的采访中,NGINX 社区领导者 Sarah Novotny 说:“在 Web 性能社区中,了解 NGINX 实际上成了一种秘密握手——NGINX 是现代 Web 的秘密核心。” 她还解释说,除了技术优势外,该项目还拥有一个不断壮大的国际社区。
那么 NGINX 有什么不同之处呢?NGINX 使用可扩展的事件驱动架构,而不是更传统的进程驱动架构。这需要更低的内存占用,并使并发连接扩展时内存使用率更可预测。
在传统的 Web 服务器架构中,每个客户端连接都作为一个单独的进程或线程处理,并且随着网站受欢迎程度的提高和并发连接数量的增加,Web 服务器会变慢,从而延迟对用户的响应。
从技术角度来看,生成单独的进程/线程需要将 CPU 切换到新任务并创建新的运行时上下文,这会消耗额外的内存和 CPU 时间,从而对性能产生负面影响。
NGINX 的开发目标是实现 10 倍的性能提升并优化服务器资源的使用,同时还能够扩展和支持网站的动态增长。因此,NGINX 成为最著名的模块化、事件驱动、异步、单线程 Web 服务器和 Web 代理之一。
为什么使用 NGINX?
如今,应用程序统治着世界。它们不仅仅是运行人们工作场所的工具,现在它们还运行着人们的生活。对即时响应、完美行为以及更多功能的需求是前所未有的。当然,人们期望应用程序在不同类型的设备(尤其是在移动设备上)上都能同样出色地工作。应用程序的运行速度与它的功能同等重要。
NGINX 的核心功能,例如其具有高性能 HTTP 和反向代理服务器、访问和带宽控制以及与各种应用程序高效集成的能力的、大规模可扩展的事件驱动架构,使其成为任何需要性能、可扩展性和可靠性的网站或服务的首选平台。
关于核心功能
事件驱动是一种将各种任务作为事件处理的方法。例如,传入连接是一个事件,磁盘读取是一个事件,等等。其思想是在没有事件要处理时不要浪费服务器资源。现代操作系统可以通知 Web 服务器有关任务的启动或完成,这反过来使 NGINX 工作进程能够以有组织的方式使用适当的资源。服务器资源可以按需动态分配和释放,从而优化网络、内存和 CPU 的使用。
NGINX 用户的连接在称为工作进程的有限数量的单线程进程内的高效运行循环中处理。每个工作进程每秒可以处理数千个并发连接和请求。
NGINX 不会为每个连接创建一个新的进程或线程。工作进程从共享侦听队列中接受新请求,并在它们之间执行高效的运行循环,以处理每个工作进程数千个连接。工作进程从操作系统内核中的机制接收有关事件的通知。当 NGINX 启动时,会创建一组初始侦听套接字。然后,工作进程在处理 HTTP 请求和响应时开始接受、从套接字读取和写入套接字。
异步意味着运行循环不会卡在特定事件上。它为来自操作系统的关于特定事件的警报设置条件,并继续监视事件队列以查找警报。当警报响起时,运行循环会触发操作。反过来,特定操作始终尝试利用操作系统的非阻塞接口,以便工作进程不会停止处理特定事件。这样,NGINX 工作进程可以以最有效的方式并发使用可用的共享资源。
单线程意味着许多用户连接可以由单个工作进程处理,这反过来有助于避免过度的上下文切换,并导致更有效地利用内存和 CPU。
根据项目网站,NGINX 为互联网上最繁忙的 10,000 个网站中的 40% 以及所有网站中的 20% 以上提供支持,包括 Dropbox、Github 和 Zappos。
NGINX 社区版具有构建需要性能、可扩展性和可靠性的网站和服务所需的所有功能和特性。NGINX PLUS 通过提供增强的功能和特性将其提升到一个新的水平,这些功能和特性将帮助用户构建高性能、可信的 Web 服务器以及应用程序交付解决方案,该解决方案增加了企业就绪的功能,例如负载均衡、会话持久性、运行状况检查、监控和高级管理。公司网站包含一个页面,解释了不同版本中包含的内容。
想要了解更多?查看 NGINX 博客,以了解项目的最新动态。
本文的一个版本最初出现在 Ashnik 博客上。
1 条评论