IIS+ASP.NET 的性能对比(NGINX + FastCGI + Mono 或 XSP)?

dyn*_*com 6 nginx asp.net mono fastcgi

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

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

多线程呢?

小智 7

我正在积极开发 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,您应该研究一些优秀的非 Microsoft 开发库。(例如 NHIbernate 和http://www.castleproject.org/

我的个人偏好(当我没有报酬时)是 PHP。尽管它会降低速度,但它更容易开发并且扩展更简单(即使它需要比 .Net 更多的 PHP 服务器)。服务器比程序员便宜得多。

在任何一种情况下,任何 Web > 2.0 应用程序都将是数据绑定的,并且数据库配置对性能的影响比语言选择要深远得多。


小智 6

我对在 Windows 7 上的 IIS7 中运行的 asp.net mvc3 网站和在带有 mod_mono 和 mono 2.11.2 的 centos 6.2 上运行的同一站点进行了一些简单的基准测试。它们都是在 virtual box 中运行的同一硬件上的虚拟机。真机是酷睿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)
Run Code Online (Sandbox Code Playgroud)

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

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

这不是一个很好的基准,当然不是我会给我老板的东西。我怀疑使用 nginx 或 lighttpd 会更好地显示 mono,但我现在没有设置它们。


Che*_*eso 2

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

七、八年前,网络负载的基准测试更加活跃。但在某些时候,性能似乎是如此之好,以至于在单个标准高容量英特尔服务器上,无论您使用的是 Linux+???或者 Windows+.NET,您将会获得非常好的性能。(假设应用程序设计合理)。

不过,我无法对 PHP 和 FastCGI 做出真正的评论。

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

  • 困惑:数据? (10认同)