2011-10-21 58 views
2

我只是想知道什么会有最好的性能。假设我们有3个物理服务器,每个服务器有32个内核和64个内存ram,并且这个应用程序是一个“标准的”asp.net应用程序。负载平衡已经到位。IIS性能“架构”

设置1# -一个应用程序消耗全部 - 一个IIS服务器,每个物理服务器上运行一个应用程序。 (共3应用 “端点”)

设置2个# -共享资源 - 在一个webfarm 16个应用的一个IIS服务器。 (共48个应用 “端点”)

设置3# -虚拟化 虚拟化:15个虚拟服务器(共45个应用端点)

会有什么表现最好,为什么?

+0

应用程序更受CPU绑定或IO绑定?我想这将是IO绑定的,因为通常的网络应用都是这样做的 – Ankur

回答

3

这要看!这很大程度上取决于应用程序在做什么以及在哪里花费时间。

从广义上讲,虽然:

如果应用程序是计算绑定 - 即检索来自外部源的数据取诸如数据库的时间是有限的 - 然后在大多数情况下设置# 1可能会最快。 IIS本身是高度多线程的,并且可以通过控制机器的资源来自我调整。

如果应用程序是数据绑定 - 即每个请求花费的时间超过(例如)40%花费在等待数据,那么安装程序#2可能会更好。特别是对编写得不好的应用程序来说,情况尤其如此:即使线程正在等待数据库访问来完成它仍在消耗资源的情况。

正如此处所讨论的:How to increase thread-pool threads on IIS 7.0最终您将耗尽线程池线程。但是,正如MSDN在这里所讨论的那样:http://blogs.msdn.com/b/david.wang/archive/2006/03/14/thoughts-on-application-pools-running-out-of-threads.aspx通过创建多个IIS工作进程,您实际上只是在讨论更大的潜在问题。

除非有其他原因 - 比如可管理性 - 我不推荐设置#3,因为在整个虚拟机中管理额外操作系统的开销是相当可观的。

因此:监视您的系统,使用像MiniProfiler(http://code.google.com/p/mvc-mini-profiler/)这样的代码来找出代码中的问题所在,并尽可能使用异步非阻塞调用。

1

这确实取决于您的应用程序,您必须为每个架构和性能设计测试您的设置。有些应用程序在设置1上运行速度会很快,而其他设置则无法运行,反之亦然。在iis中,您可以优化更多的性能。关键是你设计你的监控和缩放应用程序。