IIS+ASP.NET 与(NGINX + FastCGI + Mono 或 XSP)的性能如何?

IIS+ASP.NET 与(NGINX + FastCGI + Mono 或 XSP)的性能如何?

每个可以处理多少请求?需要多少 RAM?

我记得FastCGI是打开的初始化进程,每个进程可以处理一个请求。

那么多线程怎么样?

答案1

大约一年前,微软发布了 IIS + WCF 的基准测试,名为股票交易员。不完全是面向网页的基准。无论如何,它使用 IIS、工作进程和 .NET 代码表现出了非常好的性能。

7 或 8 年前,对 Web 负载的基准测试更为活跃。但在某些时候,性能似乎非常好,以至于在单个标准的高容量英特尔服务器上,无论您使用的是 Linux+??? 还是 Windows+.NET,您都会获得非常好的性能。(假设应用程序设计合理)。

不过,我实际上无法对 PHP 和 FastCGI 发表评论。

而且我不知道有谁在相同硬件上对 Linux+Mono+XSP 与 Windows+.NET+ASPNET 进行过基准测试。

答案2

我正在积极开发 PHP 和 ASP.Net。我不能说我对 IIS 或 NGINX 有很深的了解,但我对 Apache 和 Lighttpd 非常熟悉。

ASP.Net 使用线程架构,这是 Web 服务器本身的重要组成部分。静态变量在请求之间和用户之间保留其值。这就是 ASP.Net 获得大部分速度优势的地方。共享内存存储在每个单独的进程内以及线程之间。单独的进程不共享内存。因此,当您扩展到一台服务器以上时,大部分优势就会丧失。

PHP 是按照老式 CGI 风格构建的,每个请求都是一张白纸。这意味着任何公共信息要么必须从公共存储中获取,要么完全重新生成。PHP 并不慢,它与众不同。PHP 中的大多数主要操作都是调用用 C 编写的模块,因此它们的速度非常快。PHP 本身的执行速度不如编译语言快,但绝不慢。PHP 有一些(非常常见的)模块,它们缓存编译后的(内存中)代码版本,可以将性能提高 4 到 10 倍。

PHP 已经存在一段时间了,并且存在许多针对其 CGI 风格的解决方案。xcache 提供的值存储与 ASP.Net 的静态变量非常相似。Memcache 为持久共享变量提供了一种稍慢但更好的扩展(在物理服务器之间)解决方案。

ASP.Net 提供了更多的形式主义和结构。但是糟糕的程序员会用任何语言把事情搞得一团糟。如果你选择 ASP.Net,你应该研究一些优秀的非微软开发库。(例如 NHIbernate 和http://www.castleproject.org/

我个人的偏好(当我没有其他工作报酬时)是 PHP。尽管速度会受到影响,但它更容易开发,扩展起来也更简单(即使它需要比 .Net 更多的 PHP 服务器)。服务器比程序员便宜得多。

无论哪种情况,任何 Web > 2.0 应用程序都将受到数据约束,并且数据库配置对性能的影响将比语言选择更为深远。

答案3

我对在 Windows 7 上的 IIS7 中运行的 asp.net mvc3 网站和在 centos 6.2 上使用 mod_mono 和 mono 2.11.2 运行的同一网站进行了一些简单的基准测试。它们都是在 Virtual Box 中运行的同一硬件上的虚拟机。实际的机器是 Core i5。

在同一网络上的另一台 Linux 机器上使用 apache bench(ab -n 1000 -c 100)

Centos 6.2 (default settings, no other sites running on 8088)
Server Software:        Apache/2.2.15
Server Hostname:        192.168.1.208
Server Port:            8088

Document Path:          /
Document Length:        24 bytes

Concurrency Level:      100
Time taken for tests:   3.401 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      354000 bytes
HTML transferred:       24000 bytes
Requests per second:    294.01 [#/sec] (mean)
Time per request:       340.124 [ms] (mean)
Time per request:       3.401 [ms] (mean, across all concurrent requests)
Transfer rate:          101.64 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    3   6.4      0      25
Processing:    14  321  71.1    325     483
Waiting:       14  321  71.1    325     483
Total:         39  324  67.8    326     483

Percentage of the requests served within a certain time (ms)
  50%    326
  66%    344
  75%    358
  80%    370
  90%    408
  95%    426
  98%    441
  99%    445
 100%    483 (longest request)



(Again default settings, Windows 7 x64)
Server Software:        Microsoft-IIS/7.5
Server Hostname:        192.168.1.115
Server Port:            8088

Document Path:          /
Document Length:        27 bytes

Concurrency Level:      100
Time taken for tests:   0.469 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      294783 bytes
HTML transferred:       27351 bytes
Requests per second:    2131.09 [#/sec] (mean)
Time per request:       46.924 [ms] (mean)
Time per request:       0.469 [ms] (mean, across all concurrent requests)
Transfer rate:          613.48 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        4   17   4.6     17      27
Processing:    12   28   6.9     28      61
Waiting:        9   22   6.9     22      55
Total:         24   45   7.0     45      67

Percentage of the requests served within a certain time (ms)
  50%     45
  66%     48
  75%     49
  80%     50
  90%     52
  95%     55
  98%     59
  99%     62
 100%     67 (longest request)

我确信您可以调整设置等。但除非我忽略了一些简单的东西,否则 IIS 运行 asp.net mvc 似乎要快很多倍。

视图本身基本上是空的,其中只有一个单词。

这不是一个很好的基准测试,我肯定不会把它交给我的老板。我怀疑 mono 搭配 nginx 或 lighttpd 会表现得更好,但我现在还没有设置它们。

答案4

这里有针对 IIS 和 nginx 的出色基准测试: (以及 Apache、Cherokee、G-WAN、Lighttpd、Ulib 等)

Linux

http://gwan.ch/en_linux.html

视窗

http://gwan.ch/en_windows.html

使用PHP、Java 和 C#

http://gwan.ch/

我从未在其他任何地方看到过如此清晰的比较。测试源代码(PHP、Java、C#)也可在此处获取:

http://gwan.ch/source/

希望能帮助到你。

相关内容