为什么Nginx这么快?


31

像漫步者这样的网站如何如此快地提供动态内容?甚至比Yahoo(在我的国家(东南亚)拥有服务器;漫步者没有)更快。

这纯粹是Nginx的能力吗?我应该在哪里研究这些功能?

这里几乎是一个新手,我相信如果从Nginx提供服务,则serverfault.com将比IIS 7快得多(假设两种情况下的数据库访问时间相同)。这是一个公平的假设吗?

编辑:

在IIS7之前使用Nginx从Karl发表


请注意,serverfault.com已经使用Nginx(根据Wappalyzer)。:P
WillS 2015年

Answers:


26

您可能会看到演示文稿,以获取有关nginx内部的概述。主要区别在于对请求的异步处理,而不是像Apache那样使用线程。您也可以查看此文档


2
关于nginx的体系结构和C10K问题的好答案。但是,我了解OP的问题与感知页面加载速度有关,这与nginx无关。
杰斯珀M,

“异步”实际上是什么意思?我一直在想这意味着要在单独的线程中执行。
伊万

异步均值Nginx始终充当代理,即使使用Php:Nginx获取HTTP请求,发送到Php服务器,但不锁定/等待发送HTTP响应。这就是为什么您看到高流量网站的(速度,CPU / RAM)差异的原因。但是对于某些请求(涉及95%的互联网....),并没有提高性能,但是Nginx很酷;-)
Thomas Decaux 2013年

21

像漫步者这样的网站如何如此快地提供动态内容?...这纯粹是Nginx的功能吗?我应该在哪里研究这些功能?

这与所使用的Web服务器几乎没有关系-nginx,IIS和Apache都“足够快”,并且通常可以在几毫秒内完成工作。nginx的速度比Apache快得多,但这仅意味着网站所有者将需要更少的服务器作为Web服务部件-nginx不会更快地将数据传输给您。

不太重要的部分是服务器端速度,即创建HTML所花费的时间。更为重要的部分是“前端”性能,即我的意思是HTML,CSS,Javascript和图像,它们的数量,它们的大小以及它们的正确传递(HTTP压缩,缓存)。

当然,服务器端的速度仍然很重要,我并不是说应该忽略它,或者不要紧。但是通常这是最终用户速度的最小部分-服务器端工作通常在不到500毫秒的时间内完成,但是在经过3,000-5,000毫秒之前页面尚未准备就绪。这段时间的大部分时间用于下载前端资源(CSS,Javascript,图像)。

史蒂夫·索德斯(Steve Souders)在Yahoo期间从事原始工作,现在他在Google。他的第一本书“高性能网站”是学习更多有关创建快速网站的最佳起点。这段视频这些设计规则中可以找到与他书中相同的材料。但是,我发现这本书读起来很快,更容易理解。

您可以通过WebPageTest.org的测试器来运行这些站点,这会使您对这些站点的前端部分以及它们变快或变慢的原因有很好的感觉。

我相信,如果从Nginx提供服务,则serverfault.com将比IIS 7快得多(假设两种情况下的数据库访问时间相同)。这是一个公平的假设吗?

不,那是个误会。:-)


18

与用作完整服务器相比,Nginx更常用于负载均衡其他应用程序/服务器并提供静态内容。

例如,您可能使用许多python框架之一编写了一个应用程序,并使nginx成为该实例的许多实例的前端(可能分布在多台计算机上)。在这种情况下,nginx服务器有两个用途:它直接处理对静态内容(例如图像和样式表)的请求(由于其设计,它可以非常快地完成此操作),并且将动态请求传递给应用程序,以将负载分散到已知的所有实例之间。这也是Ruby on Rails社区中非常流行的配置。

还有其他两个可能的原因,使Rambler看上去比本地Yahoo服务更快。首先,本地Yahoo PoP可能只是没有足够的资源来满足它更快地获取的请求数量,因此也许简单地添加更多硬件(假设软件以这种方式很好地扩展)就可以加快它的速度(但是,大概差异不大)。值得维护额外套件的成本,否则Yahoo会做到这一点)。另一个很大的不同可能是后端而不是Web服务器-毫无疑问,这两个服务的数据库安排将有很大不同,即使它们不可能运行完全相同的各种查询(以及专用于数据库架构的硬件也将产生重大影响)。

分析为什么一项服务比另一项服务(通常或在特定情况下)要快的原因通常不会得出一个简单的答案-有许多方法可以设计一个旨在扩展到成千上万用户的应用程序,每个应用程序都具有自身的利益,问题和折衷方案,即使您将所有这些差异都考虑在内,每个站点的用户群也会有所不同,此外,网络问题也超出了设计人员的控制范围。


3

在静态内容服务器/动态内容生成器之前,nginx可能是但可扩展的体系结构,具有合理的负载平衡。如果您真的想获得出色的最终用户体验,则应该将内容移近“眼球”-使用一些CDN。

如果你感兴趣的主题-看看和..好-谷歌; - ]


2

最好的站点使用诸如Zeus的ZXTM之类的应用程序加速器-它们可以在许多情况下缓存动态响应,这显然是很有好处的。



0

我很难看到serverfault更快(SO可能会因为流量而导致加载问题?),因为在我这里,这已经是EU中的即时页面加载。与大多数本地新闻站点等相比,它更快,响应速度更快。

加载时间和延迟方面的大多数明显问题都来自服务器与最终用户imo之间,而不是服务器的实际性能(除非有人确定了大小或设计有误)。可以使用不同的方式对不同的站点进行路由,并且对我来说,在我所在的国家/地区的站点很有可能比整个地球上的站点具有更大的延迟-这全都取决于太多的变量,您不能说仅通过服务即可解决升级/切换,除非您知道这是特定用途的问题所在...

显然,在服务器上进行各种缓存具有很大的不同,但是据我所知,所有这些站点都已经做到了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.