负载平衡IIS。 从一个服务器和asp.net页面从另一个服务图像和HTML

我们使用双CPU的Windows 2003服务器和IIS得到飞越请求,不能处理它们,但同时它使用less于20%的CPU和不到40%的内存。 当服务器无法提供任何请求时,不仅无法浏览网站,甚至不能提供其他网站上使用的图像。 我们正在考虑安装VMWare,在这台机器上安装2台服务器,并使用一台服务器来提供asp.net页面,另一台服务器提供图片和简单的html页面。 你们知道我们如何将图像和html页面请求路由到一个服务器,并请求aspx页面到另一个?

任何想法都表示赞赏。

谢谢,丹尼斯

Hmnn,我们正在谈论的是每秒多less个请求 (分为静态和dynamic),以及在哪个硬件上? 你的文章没有提供具体细节,但是听起来有些奇怪,IIS应该不堪重负,只能使用40%的CPU。

我绝对不会使用VMWare。 虚拟化技术是一个很好的技术,有很多好的用途,但这不是一个。 所有的虚拟化在“裸机”上运行都会产生性能开销,这会让你在这种情况下变得更糟。

深入研究日志文件,并查看CPU,networkingI / O,磁盘I / O和RAM使用情况的性能监视器指标 ,并查看这是否指向任何特定方向。

IIS前面是否有任何设备可能会超载? 便宜的SOHO防火墙,任何HTTP代理,任何“内容检查”防火墙或IDS系统?

你正在运行的aspx代码,你看过吗? 它有任何愚蠢的devise决定,可能会暂停整个计算机,如做大规模的磁盘颠簸或耗尽线程池?

如果服务器真的处于极限,并且没有快速获胜,那么可以考虑以下几点:

一个便宜的解决scheme可能是设置2个DNS主机名,即www.companyname.com和static.companyname.com,然后在IIS中设置2个站点,一个针对静态文件服务进行优化,另一个针对dynamic内容(aspx)。 对于静态文件,我通常会启用持久的HTTP连接,对于dynamic内容我会禁用它。 优化可能会让你留出一些空间来performance明智的performance,但这可能还是不够。 AFAIK是没有办法保证IIS 6中的站点之间的特定资源分配。

关于分离静态内容的最佳方式是将所有静态文件服务完全从服务器移出,或者通过专用新服务器来完成任务,或者甚至通过使用CDN来更好地完成。

低端CDN的价格已经大幅下降,Amazon S3 + Cloudfront,CacheFly和其他厂商的入门价格都很低。 当然,添加CDN意味着在整体架构中增加另一个单一的故障点,但是由于其分布式特性,CDN大多能够保持较高的正常运行时间。 添加CDN可能会使您的网站对海外用户感觉更快。

你确定问题是服务器,而不是你的带宽或可能打开的连接数(也许在防火墙)?

尝试使用Windows“性能监视器”获取一些数据。 在设置虚拟服务器之前,您还可以尝试将networking放置在不同的应用程序池中。

在什么意义上“不能处理”? IIS会抛出一个错误? 任何在access_log或HTTPERR日志?

除了networking带宽之外,我还会关注磁盘活动和内存。 如果提交的内存超出了机器中的内存,则有一个可能的答案:Windows将不得不交换,并且磁盘将很忙。

如果内存看起来不错,无论如何检查磁盘活动:对于请求数量来说太慢了吗?

就路由而言,在不重写页面的情况下,唯一可以做的事情是在服务器前面有一个代理服务器,用于根据URL路由请求。 这可能是一个带Squid或Apache的UNIX / Linux机器,或者带有某种forms的代理服务器的Windows,甚至可能是专用的负载均衡器硬件。

你实际上可能想从堆栈溢出尝试这个答案来打开你的TCP / IP堆栈。

Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] "EnablePMTUDiscovery"=dword:00000001 "MaxUserPort"=dword:0000fffe "TCPTimedWaitDelay"=dword:0000003c "TCPMaxSendFree"=dword:0000ffff "SynAttackProtect"=dword:00000001 

也许你可以升级到Windows Server 2008和IIS7,并使用应用程序请求路由 。

你手上有一个可解决的问题。 如果你试图用虚拟机进行包装,你只要将可解决的问题变成3个问题,其中2个是不可解决的。

PerfMon可能会告诉你,长时间运行的ASP或ASP.NET请求会导致asynchronous线程超载。 如果这是正确的,那么只能通过加快处理请求来解决这个问题。

最简单的方法是打开高级日志logging属性“Time Taken”,并要求开发人员(您自己?)每个页面进程的时间less于X毫秒。 可以通过多个快速的asynchronous请求处理长时间运行的请求,所以不要拒绝回答。

你遇到的图像加载问题是一个症状和祝福。 它告诉你,你可以做的工作。