7

我正在使用负载平衡的旧版 ASP 经典解决方案(通过外部硬件并有一个 IIS 站点,其主目录是 UNC 路径。我被告知此设置当前存在以下问题:

  1. 当使用 UNC 路径作为主目录时,IIS 中某处有一个“索引”,它“缓存”了一定数量的某些类型的文件,当达到限制(默认为 50)时,后续请求不在缓存中的页面将返回 404。
  2. 当使用 UNC 路径作为主目录时,在启动 IIS 站点时,上述“缓存”将开始填充,这将阻塞站点 IIS,直到缓存被填满,这意味着巨大的站点(15,000 个 .asp 文件)不可用IIS 站点启动后最多 30 分钟。
  3. 当使用 UNC 路径作为主目录时,如果同时向站点发出超过一定数量的请求,Windows 将达到“每台服务器的网络 BIOS 命令限制”,所有超过限制的请求都必须等到 IIS“关闭会话”到服务器。我被告知限制是 100 个文件并且不可配置。

现在,这一切听起来有点奇怪。如果我使用默认设置设置一个新的 Windows 2003 服务器,并使用它来托管一个具有 15,000 个 .asp 文件的 ASP Classic 应用程序,使用服务器上的共享作为 IIS 站点的主目录,我真的会遇到这些问题吗? ? 如果是这样,有没有办法在不改变架构的情况下对抗它们?

(澄清一下,“负载平衡”很重要的唯一原因是负载平衡是文件在服务器共享上的原因。如果不需要负载平衡,文件可以在本地磁盘上。)

4

3 回答 3

5

是的,这是可能的,但是是的,它可能会导致问题。

当 ASP.NET 将 ASPX、ASCX 和其他内容页面编译成程序集时,它会创建大量 FileSystemWatcher 以监视它们之间的依赖关系,以便在文件更改时可以重新编译。这些会占用 NetBIOS 资源。

此外,每次您对站点的服务路径执行 File.Exists 或 Directory.Exists 调用或任何其他类型的 IO 时,都会增加对 NetBIOS 限制的要求。

可以通过注册表将 NetBIOS 限制设置为高于其默认值。

对于目录和文件相对较少的小型站点,您可以非常成功地运行 UNC 共享,因为 ASP.NET 将在其编译程序集启动后继续运行。但是,您添加的目录和文件越多,出现问题的可能性就越大。

我们尝试运行一个庞大的站点(数百个目录和 ASPX/ASCX 文件),它可以正常运行几分钟,直到访问足够多的 url 达到 NetBIOS 限制,然后每次后续页面查看都会导致异常。我们最终被迫使用 robocopy 发布解决方案。

最后,您必须测试您的站点是否足够小,并且您的 NetBIOS 设置是否足够高以有效运行。我建议在测试站点上使用蜘蛛,这样您就可以确定所有可以编译或访问的内容至少一次。

于 2008-12-09T22:48:30.520 回答
2

我不确定您对 IIS 和 UNC 之间交互的直接问题,但我建议在繁忙的站点(任何繁忙到需要负载平衡的站点)上,您考虑文件共享以外的其他内容。

IIS 通过网络(即文件共享)加载的 asp 将遭受负面的性能影响(延迟)。

我建议使用 robocopy 之类的东西来保持所有负载平衡服务器与中央主机同步。换句话说,部署到单个主服务器(或单个主位置),然后将文件 robocopy 到负载均衡器池中的每个从属服务器。

这不仅会消除您描述的奇怪的 UNC 问题,而且还会给您带来不错的性能提升(通过消除加载 asp 页面时的网络命中)。如果你这样做,我会期待相当大的性能提升。

于 2008-09-23T20:36:36.767 回答
1

对于答案 3,您可以更改网络 BIOS 命令限制。它是一个非常简单的注册表编辑修复:http: //support.microsoft.com/kb/810886/en-us

我自己也遇到过这个特殊问题。

于 2008-09-23T20:34:02.483 回答