快速、简单的网络场设置

快速、简单的网络场设置

我正在使用 asp.net 3.5 和 SQL server 2008,并且想要建立一个非常简单的 Web 场。

我购买了 2 台虚拟服务器,我不在网页上使用视图状态或会话,只使用 cookie,因此我需要做的就是在每个虚拟服务器上拥有相同数据库的 2 个版本(我假设),并且在每个服务器上拥有二进制文件/网页的 2 个版本(我假设)。我需要某种指南来设置这些,以便当用户发出请求时:

a) 服务器负载平衡,请求发送到负载最少的服务器 b) 每当 SQL 数据库发生更改时,它也会反映在另一个数据库中

这听起来可能吗?

答案1

回答你的问题是,是的,这不仅听起来可能,而且确实可能​​。

首先,根据您购买了 2 台虚拟服务器的说法,我猜这些服务器是从某个托管公司购买的?好吧,让我们假设这是真的,如果您仅限于使用两台服务器,那么最好使用一台作为数据库服务器,另一台作为 Web 服务器。如果您认为您的流量足以需要两台 Web 服务器,那么请购买第三台服务器并将其作为数据库服务器运行。如果您确实购买了两台 Web 服务器,那么您肯定希望您的代码在两台服务器上运行。

如果您确实需要两台 Web 服务器和两台数据库服务器,并且只购买两台服务器,则您无法在同一数据库上以主动模式运行它们。更新只能发送到一台主服务器,然后复制可以将这些更改传播到从服务器。

实现负载平衡的简单方法是使用循环 DNS,这种方法简单、快速,设置起来也不是很困难,而且在分散负载方面做得不错。根据您的问题,我假设您的技能水平,建议您将此作为起点。

这实际上只是触及了表面,如果您认真对待这个网站并真诚地相信它将有足够的流量来要求负载平衡配置,请找一个了解系统方面的人来帮助您。

答案2

从数据库的角度来看,您在那里描述的是一个“主-主”复制方案(请参阅此处了解相关说明这可能意味着您需要 SQL Enterprise Edition(每台服务器一个许可证),这并不便宜 - 您无法使用 Express Edition 做到这一点,可能也无法使用 Standard 做到这一点。您可以尝试在您的应用程序逻辑中实现这一点,但这将是一个复杂的麻烦。如果两台服务器在 DC 中位于同一个 vlan 上,那么当它们需要写入任何内容时,您可以让两台服务器在请求中访问同一个主数据库,但对于只读请求,则从各自的数据库中读取 - 这可以与主从复制一起使用,这是一个更容易(并且可能更便宜)的前景。本质上:将 SQL 数据库耕种到多台机器比耕种访问数据库的 Web 服务器要困难得多。

将请求传递到两个不同的 Web 服务器的最简单方法(如果如所述情况那样,所有 HTTP(S) 请求都带有它们需要的所有状态,而不是一些请求被保存在服务器端“会话”中,则不需要任何“粘性会话”之类的东西)是使用循环 DNS,为相关名称设置多个 A 记录。看这里。这不考虑其中一个服务器宕机的情况,不是一个高可用性解决方案,你对平衡几乎没有控制权(你无法决定哪台机器获得点击量,因此当某台服务器已经很忙时,你可以减少该服务器的点击量)。对于 HA 和受控平衡,你需要一台额外的机器,所有请求都经过它,并让它决定哪个真正的 Web 服务器获得点击量。

在多台服务器上扩展应用程序(为了提高性能、高可用性、地理位置或以上几点的组合)不是这看上去似乎是一个很简单的任务。

答案3

为什么需要 2 个数据库副本?您托管的是哪种应用程序?数据库的近实时同步是否足够好?

为什么不将两个 Web 服务器指向一个数据库服务器?以您描述的方式扩展 SQL 服务器并非易事,而且这绝对不是一个快速而简单的设置!

相关内容