什么是networking农场的最佳实践

从单服务器迁移到Web场时,处理数据库连接和日志文件以及其他问题的最佳做法是什么?

我注意到这两个答案到目前为止都忽略了明确地调用设置你的MachineKey 。

这在服务器场中的请求可能被发送到任何服务器的场景中是非常重要的 – 如果没有这个请求,发送到不同服务器的请求将在解密页面的viewstate和任何encryption的会话标记时抛出exception。

还要注意的是,如果您依赖于诸如global.asax中的SessionEnd之类的事件,则从InProc会话状态转移到其他事件可能会遇到其他问题 – 如果您不使用InProc会话,则不会触发此事件。

另一个需要考虑的是为应用程序创build一个帐户,而不是默认的IUsr_MachineName帐户,这样可以更轻松地pipe理数据库连接(例如,在SQL中只需要一个帐户),并排除了“错误的login”types错误。

移至网上农场时,请注意以下几点:

  1. 不要使用InProc会话状态; 切换到SQL模式(或避免会话状态)
  2. 数据库连接将被合并并默认共享; 他们不应该要求任何明确的pipe理
  3. 使用Windows事件日志进行应用程序级日志logging。 这样可以更轻松地远程收集和查看日志
  4. 使用像logparser这样的工具来自动处理你的IIS日志
  5. 一旦你超越了4或5台服务器,开始考虑自动映像部署
  6. 对于大约8台或更less的服务器,可以使用Windows附带的networking负载平衡(NLB); 除此之外,你应该看看硬件负载平衡。

这是一个很大的话题,而这只是冰山一angular。 如果可能会有所帮助,我会在书中详细介绍这些细节: Ultra-Fast ASP.NET 。

要担心的一件大事是无国籍和有状态的会议。

如果你没有状态,那么集群层可以把一个http请求路由到你的任何服务器。 否则会话状态必须考虑将您的第二个,第三个等请求路由回同一个服务器。 所以你最终可能会重构你的代码,最终导致无状态。 例如当用户浏览表格时,当前光标可以被保存在浏览器页面隐藏variables中,以被发回到下一页或上一页的“农场”。

数据库连接通常是事件驱动的。 每个“服务器场”服务器都会收到http / ajax请求,连接到数据库,获取数据,断开连接。 只有在stream量很大的情况下,数据库连接才能被caching,但需要编写更多的代码来解决这个问题。

日志文件。 每个“服务器”服务器必须将其自己的日志文件转储到自己作为集群中的中央服务器是一个坏主意,好像它的下降一样,那么额外的代码就必须做出决定。 日志视图包可以在date和时间范围内轮询所有“服务器场”服务器上的日志数据。

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