何时使用负载均衡?

9
我刚开始接触网站开发的更复杂部分。也许这不是最好的地方。然而,什么时候最适合为 Web 项目获取负载均衡?我明白,这取决于良好设计/糟糕设计,以及有多少用户可以访问网站而不会影响性能。但是,我计划编写一个新项目,可能会有很多用户,并且想知道是否应该从一开始就考虑负载均衡。欢迎各种意见;提前感谢!
我还应该说明一下,该项目很可能是 asp.net(尚未决定是 WebForms 还是 MVC),后端使用 MongoDB 或 PgSQL(同样还在考虑中)。
4个回答

10

负载均衡也可以是一种高可用性的形式。如果您的Web服务器宕机了怎么办?更换它可能需要很长时间。

通常,当您需要考虑吞吐量时,说明您已经很富有,因为您拥有大量的用户。

Stackoverflow每月使用几台服务器(约6台)服务于1000万个独立用户。想象一下,如果您不断地生成10个HTTP响应/秒,每天在8个小时的高峰期内,您会有多少请求:10*3600*8= 288000个页面展示量/天。您即将拥有这么多用户。

如果您确实拥有这么多用户,您可以将应用程序优化到20个请求/每秒和CPU核心,这意味着您可以在一台普通服务器上获得80个请求/每秒。这已经是很多了。

稍后添加负载均衡器通常很容易。LB可以使用cookie标记每个用户,使其固定到一个特定的目标。您的应用程序不会注意到任何区别。通常情况下。


在考虑是否需要使用多个服务器之前,大约有多少并发用户是一个不错的参考数字? - Daniel Casserly
3
我认为关键不在用户数量,而在于应用的平均响应时间。 - Maciej

7
这是针对电子商务网站的吗?如果是,那么真正需要问的问题是“每小时网站宕机会损失多少钱?”如果这个数字很大,那么我会把负载均衡作为优先考虑的事项。
我见过一些更重要的架构决策会影响到这一点,如使用会话变量。如果用户在访问期间在不同的服务器上结束,则需要提供无缝体验。会话变量无法从一个服务器传输到另一个服务器,因此应避免使用它们。
我在工作中支持类似的解决方案。我们在三台Windows 2k8服务器上运行四个(曾经是八个).NET电子商务网站(由两个主/辅SQL Server 2008数据库支持),每天接收约1300个订单。每个网站都是负载均衡的,并通过保活功能“保留在集群中”。这样做的好处是,我们可以将一个服务器停止服务进行维护,而用户几乎不会注意到任何变化。当我们重新启用复制服务并快速推送更改到其他两个服务器时,我们会将其带回。
因此,我建议认真考虑采用这样的解决方案。

每天有1300个订单,那么有多少用户?20,000个吗?听起来是一个庞大的系统。 - Aristos
订单数据是我唯一拥有的东西,如果不进行一些挖掘的话。但在繁忙的日子(周二上午10点至下午1点中部时间),我们曾经看到每台服务器上有200多个活动连接。 - Aaron
第四个网站是http://www.labsafety.com,但现在它重定向到http://www.grainger.com的着陆页面...截至今天早上。 - Aaron

2
正如你所说,是否以及何时引入负载均衡取决于性能和你想服务的用户数量。负载均衡还可以提高应用程序的可靠性-当一个系统崩溃时,它不会停止工作。如果你预计项目会变得非常大并为许多用户提供服务,我建议你设计应用程序,使其能够升级到负载均衡,因此不要做任何非标准的事情。尽量避免自制解决方案,并始终遵循良好的实践。如果以后真的需要负载均衡,也不需要改变你的应用程序。
更新:
你可能需要提前考虑,但不要以过度复杂化应用程序为代价。不要过分担心一切都要在“万一”情况下快速运行。例如,不要担心会话-会话管理可以随时轻松移动到 SQL Server 中,这是使用负载均衡的方法。缓存也可以帮助你解决未来的瓶颈问题,但你不需要立即实现它-良好的设计(稳定的接口)、分离和解耦将允许稍后添加缓存。因此,再次强调-坚持良好的实践,不要关闭门,但也不要立即打开所有门。
你可能会觉得this篇文章很有趣。

谢谢,这是一个很棒的链接。还有你的建议。 - Daniel Casserly

2
这里可能会影响另一个参数并减慢性能的是:
  • 带宽
  • 处理
  • 同步
与您要服务的用户数量以及您想要提供的媒体有关。因此,如果您需要提供大量视频/文件,则需要许多服务器来传递它。假设您没有,下一个需要检查的是用户和处理。
根据我的经验,锁定会话会减慢处理速度。因此,加快处理速度的一个重要步骤是进行完全自定义的会话处理,这样您的页面就不会相互锁定,您也可以处理太多用户而无需出现问题。
现在,对于下一步,假设您有一个保存所有数据的数据库,为了从负载平衡和多台计算机中获得利益,技巧是制作要显示的本地缓存。
因此,思路实际上是避免过多的锁定使用户等待其他用户,并且第二个思路是在每台不同的计算机上具有本地缓存,该缓存是从主数据库数据动态生成的。
参考: Web app blocked while processing another web app on sharing same session Replacing ASP.Net's session entirely call aspx page to return an image randomly slow

始终在线

还有一个参数是您可以创建一种解决方案,该解决方案可以处理一个服务器适用于所有情况,并且所有情况都适用于一个服务器的“一切为了大家”的风格,因此您实际上可以使用更多服务器进行备份。因此,如果出于任何原因(例如更新和重启)关闭一个服务器,则其余服务器仍然可以工作并提供服务。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接