网络农场的最佳实践是什么

网络农场的最佳实践是什么

从单个服务器移动到 Web 场时,处理 DB 连接和日志文件及其他问题的最佳做法是什么。

答案1

我注意到,到目前为止,这两个答案都没有明确指出设置 MachineKey

在农场场景中,这一点非常重要,因为请求可以发送到任何服务器 - 如果没有这个,发送到不同服务器的请求在无法解密页面的视图状态和任何加密的会话令牌时将引发异常。

还要注意,如果您依赖于 global.asax 中的 SessionEnd 等事件,那么从 InProc 会话状态转移可能会给您带来其他问题 - 如果您不使用 InProc 会话,这将不会触发。

另一件需要考虑的事情是创建一个供应用程序运行的单一帐户,而不是默认的 IUsr_MachineName 帐户 - 这样可以更轻松地管理 DB 连接(例如,SQL 中只需要一个帐户)并排除所有地方的“登录不正确”类型的错误。

答案2

在迁移到网络农场时,需要注意以下几点:

  1. 不要使用 InProc 会话状态;而是切换到 SQL 模式(或完全避免使用会话状态)
  2. 默认情况下,数据库连接将被池化和共享;它们不需要任何明确的管理
  3. 使用 Windows 事件日志进行应用程序级日志记录。这样可以更轻松地远程收集和查看日志
  4. 使用 logparser 之类的工具自动处理 IIS 日志
  5. 一旦服务器数量超过 4 或 5 台,就开始研究基于镜像的自动化部署
  6. 对于大约 8 台或更少的服务器,您可以使用 Windows 中包含的网络负载平衡 (NLB);除此之外,您还应该考虑硬件负载平衡。

不过,这是一个大话题,而这实际上只是冰山一角。为了可能有帮助,我在我的书中写了更多关于细节的内容:超快的 ASP.NET

答案3

需要担心的大事之一是无状态会话和有状态会话。

如果您没有状态,那么集群层可以将 http 请求路由到您的任何服务器。否则,必须考虑会话状态,以将您的第二个、第三个等请求路由回同一台服务器。因此,您可能最终会重构部分代码以最终实现无状态。例如,当用户浏览表格时,当前光标可以保存在浏览器页面隐藏变量中,然后发送回“农场”以获取下一页或上一页。

数据库连接通常由事件驱动。每个“农场”服务器都会收到一个 http/ajax 请求,连接到数据库,获取数据,然后断开连接。只有在流量大的情况下,数据库连接才可能被缓存,但如果出错,就必须编写更多代码来管理这一点。

日志文件。每个“农场”服务器都必须将自己的日志文件转储到自身,因为集群中的中央服务器是一个坏主意,因为如果它宕机,则必须由额外的代码做出决定。您的日志查看包可以轮询所有“农场”服务器以获取日期和时间范围内的日志数据。

我的 64 美分(通货膨胀)价值

相关内容