13

更新 2009-05-21

我一直在测试使用单个网络共享的#2 方法。这会导致 Windows Server 2003 在负载下出现一些问题:

http://support.microsoft.com/kb/810886

结束更新

我收到了一份关于 ASP.NET 网站的提案,该网站的工作方式如下:

硬件负载平衡器 -> 4 个 IIS6 Web 服务器 -> 带有故障转移集群的 SQL Server DB

这就是问题所在...

我们正在选择存储 Web 文件(aspx、html、css、图像)的位置。提出了两种选择:

1) 在 4 台 IIS 服务器上分别创建相同的 Web 文件副本。

2) 将 Web 文件的单个副本放在 4 个 Web 服务器可访问的网络共享上。4 个 IIS 服务器上的 webroot 将映射到单个网络共享。

哪个是更好的解决方案?选项 2 显然对于部署更简单,因为它只需要将文件复制到一个位置。但是,我想知道是否会有可伸缩性问题,因为四个 Web 服务器都在访问一组文件。IIS 会在本地缓存这些文件吗?它会在每个客户端请求上命中网络共享吗?另外,访问网络共享总是比在本地硬盘上获取文件慢吗?如果添加更多 IIS 服务器,网络共享的负载是否会变得更糟?

举例来说,这是针对目前每月获得约 2000 万次点击的网站。在最近的高峰期,它每秒收到大约 200 次点击。

如果您对此类设置有特殊经验,请告诉我。感谢您的输入。

更新 2009-03-05

为了澄清我的情况 - 这个系统中的“部署”比典型的 Web 应用程序要频繁得多。该网站是后台 CMS 的前端。每次在 CMS 中发布内容时,都会自动将新页面(aspx、html 等)推送到实时站点。部署基本上是“按需”的。从理论上讲,这种推动可能在一分钟或更长时间内发生多次。因此,我不确定一次部署一台 Web 服务器是否可行。想法?

4

13 回答 13

22

我会在 4 台服务器之间分担负载。这不是很多。

您不希望在部署时出现单点争用,也不希望在生产中出现单点故障。

部署时,您可以一次执行 1 个。您的部署工具应该通过通知负载均衡器不应使用服务器、部署代码、所需的任何预编译工作以及最后通知负载均衡器服务器已准备好来自动执行此操作。

我们在 200 多个 Web 服务器场中使用了这种策略,并且它在不中断服务的情况下很好地部署。

于 2009-03-05T04:51:08.000 回答
6

如果您主要关心的是性能,我认为这是因为您将所有这些钱都花在了硬件上,那么仅仅为了方便而共享网络文件系统就没有任何意义。即使网络驱动器具有极高的性能,它们的性能也不会像本机驱动器那样好。

无论如何,部署您的 Web 资产都是自动化的(对吗?),因此以多个方式进行部署并没有太大的不便。

如果它比你说的更复杂,那么像 DeltaCopy 这样的东西可能对保持这些磁盘同步很有用。

于 2009-03-05T04:52:39.963 回答
3

中央共享不好的一个原因是因为它使共享服务器上的 NIC 成为整个场的瓶颈,并造成单点故障。

于 2009-03-05T05:37:19.590 回答
2

在 IIS6 和 7 中,明确支持在 N 个连接的 Web/应用服务器机器上使用网络单一共享的方案。MS 进行了大量的性能测试,以确保这种情况运行良好。是的,使用了缓存。使用双网卡服务器,一个用于公共互联网,一个用于专用网络,您将获得非常好的性能。部署是防弹的。

值得花时间对其进行基准测试。

您还可以评估 ASP.NET 虚拟路径提供程序,它允许您为整个应用程序部署单个 ZIP 文件。或者,使用 CMS,您可以直接从内容数据库而不是文件系统提供内容。这为版本控制提供了一些非常好的选项。

通过 #ZipLib 进行 ZIP 的 VPP

通过 DotNetZip 用于 ZIP 的 VPP

于 2009-03-28T18:53:47.300 回答
2

在理想的高可用性情况下,不应该出现单点故障。

这意味着一个带有网页的盒子是禁止的。在为一家大型电信公司完成 HA 工作后,我最初会提出以下建议:

  • 四台服务器中的每台都有自己的数据副本。
  • 在安静的时间,使两台服务器脱机(即修改 HA 平衡器以删除它们)。
  • 更新两个离线服务器。
  • 修改 HA 平衡器以开始使用两台新服务器而不是两台旧服务器。
  • 测试以确保正确性。
  • 更新另外两台服务器,然后将它们联机。

这就是你可以在没有额外硬件的情况下做到这一点的方法。在我工作的电信公司的肛门保留世界中,我们会这样做:

  • 我们应该有八台服务器(当时,我们的钱比你能花的多)。到了过渡时间,将使用新数据设置四个离线服务器。
  • 然后将 HA 平衡器修改为使用四个新服务器并停止使用旧服务器。这使得切换(更重要的是,如果我们塞满了的话,切换回)一个非常快速和无痛的过程。
  • 只有当新服务器运行一段时间后,我们才会考虑下一次切换。在那之前,四台旧服务器一直处于离线状态,但已准备就绪,以防万一。
  • 为了以更少的财务支出获得相同的效果,您可以拥有额外的磁盘而不是整个额外的服务器。恢复不会那么快,因为您必须关闭服务器才能将旧磁盘放回原处,但它仍然比恢复操作更快。
于 2009-04-01T02:28:17.870 回答
1

使用部署工具,其进程一次部署一个,系统的其余部分继续工作(如 Mufaka 所说)。这是一个经过尝试的过程,可以同时处理内容文件和应用程序的任何已编译片段(部署会导致 asp.net 进程的回收)。

关于更新率,这是您可以控制的。让更新通过一个队列,并有一个单独的部署过程来控制何时部署每个项目。请注意,这并不意味着您可以单独处理每个更新,因为您可以获取队列中的当前更新并将它们一起部署。进一步的更新将到达队列,并在当前的更新集结束后被拾取。

更新:关于评论中的问题。这是基于我对需要控制其更新速率的繁重/长流程的经验的自定义解决方案。我不需要在部署场景中使用这种方法,因为对于这样的动态内容,我通常会结合不同级别的数据库和缓存。

队列不需要保存完整的信息,它只需要有适当的信息(ids/paths),让您的进程传递信息以使用外部工具启动发布过程。由于它是自定义代码,您可以让它加入要发布的信息,因此您不必在发布过程/工具中处理它。

数据库更改将在发布过程中完成,您只需要知道所需更改的信息在哪里,并让发布过程/工具处理它。关于队列使用什么,我使用的主要是 msmq 和 sql server 中带有信息的自定义实现。队列只是用来控制更新速率,因此您不需要任何专门针对部署的东西。

更新 2:确保您的数据库更改是向后兼容的。当您将更改实时推送到不同的服务器时,这非常重要。

于 2009-03-25T19:54:49.970 回答
1

我负责开发一个每月有 6000 万点击量的游戏网站。我们这样做的方式是选项#1。用户确实有能力上传图像等,这些图像被放在服务器之间共享的 NAS 上。结果很好。我假设您还在房子的应用程序端进行页面缓存等。我还会按需将新页面同时部署到所有服务器。

于 2009-03-31T19:53:31.860 回答
0

使用 4IIS 在 NLB 上获得了什么,而使用应用服务器的 BottleNeck 则失去了它。

对于可扩展性,我会推荐前端 Web 服务器上的应用程序。

在我的公司,我们正在实施该解决方案。前端的 .NET 应用程序和 Sharepoint 的 APP 服务器 + SQL 2008 集群。

希望能帮助到你!

问候!

于 2009-03-25T18:21:00.740 回答
0

我们的情况与您类似,我们的解决方案是使用发布者/订阅者模型。我们的 CMS 应用程序将实际文件存储在数据库中,并在创建或更新文件时通知发布服务。然后,该发布者通知所有订阅的 Web 应用程序,然后他们从数据库中获取文件并将其放置在他们的文件系统中。

我们在发布者的配置文件中设置了订阅者,但您可以全力以赴,让网络应用在应用启动时自行进行订阅,以使其更易于管理。

您可以使用 UNC 进行存储,我们选择 DB 是为了在生产环境和测试环境之间提供方便和可移植性(我们只需将 DB 复制回来,我们就拥有所有实时站点文件和数据)。

于 2009-03-26T17:31:34.643 回答
0

部署到多个服务器(一旦正确设置节点)的一种非常简单的方法是使用 robocopy。

最好有一个用于测试的小型临时服务器,然后将“robocopy”到所有部署服务器(而不是使用网络共享)。

robocopy 包含在MS ResourceKit中- 与 /MIR 开关一起使用。

于 2009-03-26T19:58:14.557 回答
0

为了让您深思熟虑,您可以看看Microsoft 的 Live Mesh 之 类的东西。我并不是说它是你的答案,但它使用的存储模型可能是。

使用 Mesh,您可以将小型 Windows 服务下载到您想要在 Mesh 中使用的每台 Windows 机器上,然后指定系统上属于 Mesh 的文件夹。当您将文件复制到 Live Mesh 文件夹时 - 这与复制到系统上的任何其他文件夹的操作完全相同 - 该服务负责将该文件同步到所有其他参与设备。

例如,我将所有代码源文件保存在 Mesh 文件夹中,并让它们在工作和家庭之间同步。我根本不需要做任何事情来使它们保持同步,在 VS.Net、记事本或任何其他应用程序中保存文件的操作会启动更新。

如果您的网站包含需要转到多个服务器的频繁更改的文件,并且可能有多个作者进行这些更改,那么您可以将 Mesh 服务放在每个 Web 服务器上,并且随着作者添加、更改或删除文件,更新将是自动推送。就作者而言,他们只是将文件保存到计算机上的普通旧文件夹中。

于 2009-03-27T08:50:41.113 回答
0

假设您的 IIS 服务器正在运行 Windows Server 2003 R2 或更高版本,请务必查看DFS Replication。每台服务器都有自己的文件副本,这消除了许多其他人警告过的共享网络瓶颈。部署就像将更改复制到复制组中的任何一台服务器一样简单(假设是全网状拓扑)。复制会自动处理其余的工作,包括使用远程差异压缩仅发送已更改文件的增量。

于 2009-03-31T08:50:55.883 回答
0

我们很高兴使用 4 个 Web 服务器,每个服务器都有一个页面的本地副本和一个带有故障转移集群的 SQL Server。

于 2009-04-01T14:58:24.323 回答