17

准备好 ASP.NET MVC 应用程序 web-farm 的最有效方法是什么。

最重要的是共享当前用户的信息(上下文)和(不那么重要)缓存对象,例如查找项目(州、街道类型、县等)。

我听说过/阅读过 MemCache,但还没有看到关于如何实现和测试它的简单适用方式(文档)。

4

1 回答 1

21

请求上下文
任何到达 Web 场的请求都由可用的 IIS 服务器提供服务。上下文在那里创建,整个请求由同一台服务器提供服务。所以上下文不应该是一个问题。请求是一个无状态的执行管道,因此它不需要以任何形式或形式与其他服务器共享数据。它将由同一台机器从头到尾提供服务。
用户信息从 cookie 中读取,并由为请求提供服务的服务器处理。这取决于您是否在某处缓存完整的用户对象。

会话
如果您使用TempData字典,您应该知道它存储在Session字典中。在服务器场中,这意味着您应该使用 InProc 会话以外的其他方式,因为它们不会在整个场的 IIS 服务器之间共享。您应该配置使用数据库或其他(状态服务器等)的其他会话管理器。

缓存
当谈到缓存时,情况就不同了。为了使其尽可能高效,还应提供缓存。默认情况下不是。但是查看缓存几乎不意味着当没有缓存时,它应该被读取并存储在缓存中。因此,如果一个特定的服务器场服务器没有一些缓存对象,它会创建它。随着时间的推移,它们都会缓存一些共享的公共使用数据。
或者...您可以使用memcached之类的库(正如您提到的那样)并利用共享缓存。网上有几个例子如何使用它。

但是这些解决方案都会带来一些额外的开销(比如网络和第三进程处理和数据获取等),如果没有别的。因此,默认缓存是最快的,如果您明确需要共享缓存,请选择一个。除非真的有必要,否则不要共享缓存。

于 2010-08-11T22:14:54.443 回答