小智 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,但我现在没有设置它们。
大约一年前,微软发布了一个名为StockTrader的 IIS + WCF 基准测试。不完全是面向网页的基准。无论如何,它使用 IIS、工作进程和 .NET 代码显示了一些非常好的性能。
七、八年前,网络负载的基准测试更加活跃。但在某些时候,性能似乎是如此之好,以至于在单个标准高容量英特尔服务器上,无论您使用的是 Linux+???或者 Windows+.NET,您将会获得非常好的性能。(假设应用程序设计合理)。
不过,我无法对 PHP 和 FastCGI 做出真正的评论。
我不知道有谁在相同的硬件上对 Linux+Mono+XSP 与 Windows+.NET+ASPNET 进行过基准测试。
| 归档时间: |
|
| 查看次数: |
31877 次 |
| 最近记录: |