如何创建ASP.NET Web场?

时间:2009-11-29 21:00:27

标签: asp.net scalability web-farm

我正在寻找有关如何创建 ASP.NET Web场的信息 - 也就是说,如何使ASP.NET应用程序(最初设计为在单个Web服务器上工作)工作2,3,10等服务器?

我们创建了一个Web应用程序,当时有500个用户可以正常工作。但现在我们需要让它适用于10 000个用户(同时使用Web应用程序)。

因此,我们需要设置 20个网络服务器,并通过在其网络浏览器中输入“www.MyWebApp.ru”,使10 000个用户可以使用网络应用程序,尽管他们的请求将由20个网络服务器处理,而他们不知道。

1)是否有特殊的标准软件来创建 ASP.NET Web场

2)或者我们自己创建一个Web场,通过在不同的Web服务器之间传输请求手动(使用ASP.NET / C# )?

我发现很少有关于ASP.NET Web场的信息和Web上的可伸缩性:在大多数情况下,关于可伸缩性的文章讲述了如何优化ASP.NET应用程序并使其运行得更快。但我发现没有在 2个Web服务器上运行的“Hello world”类ASP.NET Web应用程序的示例。

如果有人可以发布文章链接,或者更好地讲述自己在ASP.NET“web耕作”中的自己的体验并解决可伸缩性问题,那就太棒了。

谢谢你, 米哈伊尔。

4 个答案:

答案 0 :(得分:5)

  

1)是否有特殊的标准软件   创建ASP.NET Web场?

没有

  

2)或者我们应该创建一个Web场   我们自己,通过转移请求   在手动不同的Web服务器之间   (使用ASP.NET / C#)?

没有

要构建Web场,您需要某种形式的负载平衡。对于最多8台服务器,您可以使用内置于Windows的网络负载平衡(NLB)。对于8台以上的服务器,您应该使用硬件负载均衡器。

然而,负载平衡实际上只是冰山一角。还有许多其他问题需要解决,包括:

  1. 状态管理(Cookie,ViewState,会话状态等)
  2. 缓存和缓存失效
  3. 数据库加载(管理往返,分区,磁盘子系统等)
  4. 应用程序池管理(WSRM,池重置,分区)
  5. 部署
  6. 监控
  7. 如果它可能有用,我会在我的书中介绍其中的许多问题:Ultra-Fast ASP.NET: Build Ultra-Fast and Ultra-Scalable web sites using ASP.NET and SQL Server

答案 1 :(得分:3)

我会说你应该配置一个NLB集群(网络负载平衡),它基本上会在集群节点之间拆分所有请求(并且作为一个额外的好处来检测事情是否已关闭并停止发送请求)。 Windows中内置了这些功能,但它们与硬件设备的性能或可扩展性无法比较。如果你使用的是Windows 2008,那么设置它真的很简单。如果你这样做,请确保你有一个共享machine key或者你将开始获得视图状态无效的例外(当1个服务器提交表单并且它发布到另一个并且他们使用不同的密钥来编码数据时)。

你也可以使用DNS循环法,但在20个服务器上大概在1个数据中心,我不会看到这样疯狂的长度。如果您有多个数据中心,虽然这绝对值得考虑(因为NLB在数据中心之间不能很好地工作)。

您还需要确定用户是否交换服务器,而不会丢失会话。最简单的方法是使用会话状态数据库(在web.config中可配置,或者您可以在IIS的配置中在服务器范围内执行此操作)。如果您不使用会话,只需在web.config的Pages指令中关闭它们并将其称为一天。您也可以使用会话状态服务器,但我对此没有任何经验。

考虑花一些时间优化代码或将缓存指令添加到静态内容也可能值得考虑 - 即使您只需要减少对这些服务器中的一些服务器的需求,也可能非常划算。

希望有所帮助。

答案 2 :(得分:2)

如果您的服务器保持无状态,那么使用良好的路由器可以很容易地实现一些循环Robbin协议(将每个调用发送到单个发布的服务器ip到不同的Web服务器)。

如果它不是无状态的(比如 - 如果需要登录,或者ssl),则需要将每个会话保持在同一服务器上。

以下是有关MS应用程序请求路由的一些信息 - 您将获得所有内容:

IIS Load balancing

答案 3 :(得分:0)

我不建议#2。使用负载均衡器可以做得更好。

注意会话状态管理。除非您配置负载均衡器以使每个用户保持在同一Web服务器上,否则您将必须使用会话状态服务器或数据库。

另外,检查代码对Application和Cache变量的使用情况。这些在每个Web服务器上都是不同的。如果这些值是静态的,则可能没有问题。但是如果它们可以改变,你可以在每个Web服务器上得到不同的值。

1.x,as explained here中的ViewState曾经存在问题。我不确定这个问题是否仍然存在。

然后,您需要对web.config中的Machine Key进行一些更改,如here所述。

相关问题