13

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

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

因此,我们需要设置20 个 Web 服务器并制作一些东西,以便 10 000 个用户可以通过在 Web 浏览器中键入“www.MyWebApp.ru”来使用 Web 应用程序,尽管他们的请求将由 20 个 Web 服务器处理,而无需他们知道这一点。

1)是否有创建ASP.NET 网络农场的特殊标准软件

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

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

如果有人可以发布一篇文章的链接,或者更好地讲述自己在 ASP.NET“网络农业”方面的经验并解决可伸缩性问题,那就太好了。

谢谢你,米哈伊尔。

4

4 回答 4

7

1) 是否有专门的标准软件来创建 ASP.NET 网络农场?

不。

2) 还是我们应该自己创建一个网络农场,通过手动在不同网络服务器之间传输请求(使用 ASP.NET / C#)?

不。

要构建一个网络农场,您将需要某种形式的负载平衡。对于多达 8 台左右的服务器,您可以使用 Windows 内置的网络负载平衡 (NLB)。对于超过 8 台服务器,您应该使用硬件负载平衡器。

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

  1. 状态管理(cookies、ViewState、会话状态等)
  2. 缓存和缓存失效
  3. 数据库加载(管理往返、分区、磁盘子系统等)
  4. 应用程序池管理(WSRM、池重置、分区)
  5. 部署
  6. 监控

如果它可能对您有所帮助,我会在我的书中介绍其中的许多问题:Ultra-Fast ASP.NET: Build Ultra-Fast and Ultra-Scalable web sites using ASP.NET and SQL Server

于 2009-11-30T00:05:02.897 回答
3

我想说你应该配置一个 NLB 集群(网络负载平衡),它基本上在集群节点之间拆分所有请求(并且作为额外的好处,可以检测事情是否发生故障并停止向它们发送请求)。Windows 中为此内置了一些功能,但它们在性能或可扩展性方面无法与硬件设备进行比较。如果您使用的是 Windows 2008,那么设置起来确实很简单。如果您这样做,请确保您有一个共享的机器密钥,否则您将开始收到视图状态无效的异常(当一台服务器提交表单并将其发布到另一台服务器并且他们使用不同的密钥对数据进行编码时)。

您也可以使用 DNS 循环,但在 20 个服务器(大概在 1 个数据中心)中,我认为没有必要进行如此疯狂的长度。如果您有多个数据中心,尽管这绝对值得考虑(因为 NLB 在数据中心之间不能很好地工作)。

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

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

希望有帮助。

于 2009-11-29T21:18:00.050 回答
2

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

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

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

IIS 负载平衡

于 2009-11-29T21:05:36.480 回答
0

我不会推荐#2。使用负载平衡器会做得更好。

注意会话状态管理。除非您将负载平衡器配置为让每个用户都在同一个 Web 服务器上,否则您将不得不使用会话状态服务器或数据库。

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

1.x 中的 ViewState 曾经存在问题,如此处所述。我不确定这个问题是否仍然存在。

然后,您需要对 web.config 中的机器密钥进行一些更改,如此处所述

于 2009-11-29T21:34:21.843 回答