当我将ASP.NET
应用程序部署为web farm
.
5 回答
所有会话状态信息都需要跨服务器复制。如前所述,最简单的方法是使用 MSSQL 会话状态提供程序。
任何磁盘访问,例如用户存储的动态文件,都需要位于所有服务器都可用的区域。例如通过使用某种形式的网络附加存储。脚本文件、图像和 html 等只会在每台服务器上复制。
尝试在应用程序对象中存储任何信息或在应用程序启动时加载信息都需要进行审查。每次用户点击农场中的新机器时,都会触发这些事件。
正如其他人所建议的那样,每台服务器上的机器密钥都非常大。如果您对 IP 地址而不是域使用 ssl,您也可能会遇到问题。
您必须考虑您将要采用的负载平衡策略,因为这可能会改变您的方法。
会话是一个大问题,请确保您使用 SQL Server 来管理会话,并且所有服务器都指向同一个 SQL Server 实例。
我遇到的一个大问题是不同机器密钥分布在不同服务器上的问题。ASP.NET 使用 machineKey 进行各种加密操作,例如 ViewState 和 FormsAuthentication 票证。如果您有不同的机器密钥,您最终可能会导致服务器无法理解来自其他服务器的回发。如果您想了解更多信息,请查看此处:http: //msdn.microsoft.com/en-us/library/ms998288.aspx
- 不要使用会话,而是使用配置文件。您可以配置一个 SQL 集群来为它们提供服务。会话将过于频繁地查询您的会话数据库,而配置文件只是自行加载,仅此而已。
- 使用分布式缓存存储,例如 memached 来缓存数据,使用 ASP.Net 缓存来存储您需要的东西
- 使用 SAN 或 EMC 为您的静态内容提供服务
- 使用 S3 或类似的东西来回退 3。
- 拥有一些不错的负载均衡器,因此您可以轻松更新每台服务器,而无需关闭站点
如何:设置多服务器 ASP.NET Web 应用程序和 Web 服务
日志聚合很容易被忽略 - 在处理 HTTP 日志之前,您可能需要将它们组合起来以创建一个日志,其中包括发送到跨服务器的请求。