什么是具有最低内存占用的最快Web服务器解决方案?

23
我需要一个Web服务器,可以作为JSON提供非常简单的POST/GET请求。我不需要MVC、Rails、Django等框架。我需要一个占用内存很少的东西,最好是每个请求约5K。该Web服务器将使用Facebook Thrift与后端服务(例如Scribe)通信。每个HTTP请求也会访问SQLLite数据库,每个用户对应一个数据库且它们之间互不重叠。它将作为静态HTML文件和JSON Web服务提供。
我正在考虑以下选项:
  • Njinx配合PHP
  • Kepler Lua
  • 使用libevent或libev自己构建(可能调用Lua)
  • MochiWeb
这些选项中哪个最好,还有其他可选方案吗?我可以使用基本脚本语言如PHP、Python或Lua,甚至可以编写基本的C代码。我倾向于使用某种Erlang解决方案。
16个回答

41

我使用过nginx (https://nginx.org/),感觉不错。但是,在选择Web服务器时,您应该仔细考虑您的要求,并做出明智决策,因为这些内容可能会非常特定于应用程序。

您会注意到,在这个问题中,很多人推荐g-wan、Webmachine等等... 这些都是您应该查看和基准测试以确定它们是否更适合您的用例。

这是一种鼓励加油打气的问题,没有“正确的答案”。


赞同。Nginx非常快,特别是用于提供静态内容。 - Bob Somers
13
与其他服务器(如Lighty或G-WAN)相比,Nginx速度较慢且使用更多的CPU和内存资源。请参阅http://forum.gwan.com/index.php?p=/discussion/525/webserver-scalability-varnish-nginx-lighttpd-g-wan-rpscpuram。因此,简单地积累+1票并不能提供技术信息,而只是单纯的声援。 - Gil
我已经尝试过其中一个,G-WAN不稳定。 - Etherealone
@Gil 哦,天啊,谢谢你!发现 g-wan 真是太解放了。 - KJW
3
@Gil,是谁告诉你“nginx更慢,使用更多的CPU和内存”?很抱歉告诉你,你离真相很远。我实际使用过IIS、Apache、MiniHttpd和Nginx。我发现Nginx是最快的一个。 - Mahbub

11
作为Webmachine的作者之一,我很高兴能够帮助您。 我跟进的一个原因是,即使Webmachine中没有与JSON相关的代码,您可能会发现我们每天都使用它来处理许多不同的JSON请求和响应。 它简单易用、可扩展性良好并且执行性能合理。
如果您只想要静态内容,则像nginx或lighttpd这样的东西是显而易见的选择。 如果需要混合静态和动态请求以及内置的良好Web行为,则可以考虑使用Webmachine。
请查看 http://code.google.com/p/webmachine/wiki/ExampleResources 上的简单示例代码以及 http://blog.therestfulway.com/ 上最近的博客文章获取更多信息。
它对我们很有帮助;如果您有问题,请随时给我写信。

9

要测量占用空间,请查看可执行文件的大小(不要忘记共享库)。

TrustLeap G-WAN(150 KB,无依赖项)提供Java、C/C++、Objective-C和D脚本。

根据这些基准测试,它在运行更快的同时还使用比Nginx或Lighttpd更少的内存和CPU资源:

http://www.gwan.ch/benchmark


3
与以上提出的其他解决方案相比,G-WAN不是开源软件(是Freeware软件,不是自由软件)。它只实现了HTTP 1.0(以及一些来自HTTP 1.1的功能,如Keep-Alive),不支持E-Tag标头(但支持If-Modified-Since)。他主页上的基准测试结果令人惊叹,但检验它是否适合您的应用程序,最好的方法是使用它进行测试,并将其与其他解决方案进行比较。 - krenel
5
@krenel00说,问题并没有要求开源,而G-WAN自多年以来就实现了包括E-Tag在内的HTTP 1.1。你为什么觉得有必要散布虚假信息? - Gil
@Gil,对于 E-Tag 我感到很抱歉。http://gwan.ch/en_timeline.html 上写着在 2009 年 7 月 7 日他们添加了对 E-Tag 的支持。我曾经在某个地方读到过它不被支持的信息;关于 G-WAN 的信息在互联网上非常稀少。当我选择一个产品时,对我来说非常重要的是要知道我是否依赖于工具的开发者还是社区。私有软件的开发者可以决定停止项目,这是在你选择技术时需要考虑的事情。这并不是问题的要求,只是你回答中的一个不好的方面。 - krenel
3
很值得注意的是,你相信自己必须离问题很远才能找到反对G-WAN的论据。与其依靠可靠的来源(G-WAN的网站),你引用了(未知的)第三方,这些来源不应该很难找到,因为你还说“互联网上关于G-WAN的信息非常稀少”。这个问答平台的目的不是传播F.U.D.,所以请尽量保持记录准确:G-WAN在3年内做得比过去20年的现有产品要好得多 - Gil
http://www.shisoft.org/index.php/2016/06/06/crashing-the-g-wan-web-server-at-the-speed-of-light/ - Garvit Jain

9

Cherokee网页服务器位于www.cherokee-project.com


3
根据我的测试,Cherokee反向代理模块比Nginx的速度要快得多。 - kgriffs

8

Lighttpd 的占用空间很小,大部分内存都会被你选择的语言所占用(除非你使用 C 语言,但这并不推荐)。


它确实如此。但是Nginx处理请求要快得多。内存使用相似,不过。 - Nick P

7

7
Mochiweb非常轻量级,能够处理极高的负载。

4

G-WAN(包括ANSI C脚本在内,总共150 KB)具有本地JSON解析器,可能是最快的解析器,因为它除了支持从/到文本的导入/导出之外,还可以按名称或值搜索条目。

超越150 KB的印记(包括服务器和脚本引擎)将会很困难。


4

3
对于C或Lua,Mongoose是一个选择,它使用超过5k的内存并且最大请求大小默认为16k。这是可调的,只需在嵌入Mongoose时更改mongoose.c中的#define MAX_REQUEST_SIZE 16384即可。它的占用空间约为50k,未计算Lua(如果需要)和SSL(同样,如果需要)。运行时的占用空间取决于操作系统。您可以在https://github.com/valenok/mongoose上找到更多信息。

+1 我使用 C++11 REST 服务器对此进行了封装 http://github.com/nurettin/pwned - nurettin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接