1

概括:

我在 IIS 中有一个名为“Website”的 ASP.NET MVC 网站,使用名为“WebsiteAppPool”的 AppPool。WebsiteAppPool 被配置为允许最多 4 个工作进程,实际上创建了一个“Web Garden”。该网站还通过 web.config 配置为使用 CacheProfiles 启用 OutputCaching。

<caching>
  <outputCacheSettings>
    <outputCacheProfiles>
      <clear />
      <add name="ControllerNameActionName" duration="43200" varyByParam="*" />
    </outputCacheProfiles>
  </outputCacheSettings>
</caching>

我的问题是——

AppPool 的工作进程会共享输出缓存还是每个工作进程都有输出缓存,因此在 AppPool 中创建 4 个缓存副本。

笔记:

我主要担心的是,这将揭穿缓存输出的好处,我最好让一个 WorkerProcess 提供缓存输出而不是 4.

4

2 回答 2

2

来自MSDN

因为 Web 园可以使用多个进程,所以每个进程都有自己的应用程序状态副本、进程内会话状态、缓存和静态数据。网络花园不应该用于所有应用程序,尤其是当它们需要维护状态时。在决定 Web 园模式是否合适之前,请务必对应用程序的性能进行基准测试。

使用 Web 园时,了解会话状态和轮询的工作原理非常重要。考虑其他应用程序池设置如何影响应用程序也很重要

如果您正在处理进程内会话状态(希望您无论如何都不会),那么网络花园会特别麻烦。根据我的经验,我发现网络花园很少有人们认为的好处。

于 2009-12-12T18:47:22.197 回答
0

工作进程之间没有关系。它们每个都有自己的缓存(因为它是进程内缓存)。也就是说,如果您让您的应用程序支持网络花园场景(即不依赖于进程内状态),它将更加健壮并且更容易扩展。将来添加另一台服务器并创建网络场会更容易。

您可能会为此调用 YAGNI,但我认为以支持扩展的方式创建大多数 Web 应用程序只是常识。在您的情况下,我真的认为拥有 4 个不同的缓存是可以的,拥有一个网络花园实际上可以提高您网站的性能。

于 2009-12-12T19:11:05.273 回答