对此,我特指在 Windows 上运行网站,但并不特定于 IIS。我们有时也运行 Tomcat。现在显然有很多硬件和软件选项可供选择,在 Windows 世界中有很多需要考虑的点,例如粘性会话和有时在 Web 应用程序中固有的状态。
因此,我正在寻找的是任何具有有效负载平衡策略的良好经验,无论是基于硬件还是基于软件,以及证明与此相关的业务成本的理由。
谢谢
更新:
针对 Paul 提出的一些更深入的问题,我个人会寻找负载最小的负载平衡,并且绝对需要会话故障转移。现在这种事情也可以通过 Memcached 或类似的东西来处理。SSL 终止很大程度上取决于您是采用硬件还是软件路线,但我也可以回答我自己的问题。
这些卷可能是一个初创公司的计划,希望能够呈指数级增长,而不会给用户带来臭名昭著的失败鲸……
问题具体询问了过去在 Windows 上运行网站时,哪些负载平衡策略对您有效。如果您提出的策略是硬件负载平衡,例如 SSL 终止发生在负载平衡器上,并且您详细说明了为什么这对您来说是一个好策略,那么这将有助于回答我的问题。现在,我对不同的方法和替代方案没有足够的经验,因此我提出了这个问题。
答案1
我是 Windows 负载平衡服务 (WLBS) 的忠实粉丝。我知道有些人可能会说它无法胜任处理大型网站的任务,但微软却能让它为 Microsoft.com 工作,所以我不同意这些说法。
答案2
就像 scevans 提到的那样,负载平衡当然可以通过 Windows NLB 来实现。我猜大多数 Windows 网上商店都是这样开始的。有些会继续无限期地使用它。
一个常见的误解是 NLB 性能不佳,但从性能角度来看,它真的还不错。NLB 对于某些东西非常有用,例如相对稳定且未处于积极开发中的应用程序。NLB 让您失望的地方是它的状态检查,NLB 基本上完全忽略了应用程序层,因此在某个时间点,当您的某个 JVM 或 IIS 工作进程崩溃时,NLB 将继续看到崩溃的服务器正在监听,并继续愉快地将请求路由到正常运行的服务器上的宕机应用程序,这显然很糟糕。
这正是专用 Web 负载均衡器开始发挥作用的地方。几乎所有负载均衡器都支持各种平衡方法,包括循环法、最小连接法以及两者的加权版本。
能够为每台服务器上的每个应用程序指定健康检查页面带来了新的信心水平,并允许负载平衡器做出更好的决策。根据您的应用程序,通常应专门构建健康检查页面。我喜欢健康检查页面,以便快速轮询数据库服务器以确保数据库连接正常。这个调用应该非常便宜,我们的数据库向导提供了这个,我认为它是一个“选择 1”,但我可能错了。如果调用成功,测试页面将显示服务器标识符(我们还使用此页面查看我们在启用粘性农场上卡在哪个服务器上)。无论如何,负载平衡器每分钟会多次访问它,然后解析响应文件,只要它没有失败,它就会保持在轮换中。如果该页面因任何原因失败,服务器将从轮换中移除。这对于管理 Web 服务器的人员不具备负载平衡器的专业知识/访问权限的情况也很方便。只需重命名健康检查文件,他们就可以轻松地将服务器从轮换中拉出以进行部署或故障排除。大多数负载平衡器也可以配置一个抱歉服务器。如果您在场中的所有节点上的健康检查都失败,则会将用户发送到包含(静态)维护页面的其他服务器。
负载均衡器上的 SSL 终止也非常方便。有些负载均衡器不支持 HTTPS 进行健康检查,因此在某些情况下,卸载 SSL 是您利用上述所有酷炫健康检查相关功能的唯一方法。卸载 SSL 显然还可以释放 Web 服务器的 CPU 周期来为 Web 提供服务,而不是加密/解密,但对我来说,更大的好处在于故障排除和 SSL 管理。根据您的平台和工具,在大型服务器场中管理 SSL 证书并不容易(msdeploy 直到最新版本才支持它)。在 2 个负载均衡器上安装证书通常比在 10 个以上的服务器上安装证书更快/更容易。它在故障排除方面也非常有用,时不时地您会遇到那个非常奇怪的问题,您需要深入到数据包级别并窥探发送到 Web 服务器的内容。使用卸载 SSL,所有这些流量都是纯文本,并且分析起来非常容易。注意:这还意味着您的负载均衡器和服务器之间的网络段需要是安全的。
关于故障转移,我认为应用程序的设计不应要求粘性会话,除非有极其令人信服的理由。在 .NET 世界中,这通常很简单,只需配置应用程序以将其会话状态发送到所有节点上的 SQL 服务器,并确保所有会话对象都是可序列化的(如果不是,则在第一次打开时会出现一个大错误)。在这种配置下运行时,您可以随时在 Web 服务器上工作,而不会影响用户,只需从轮换中移除服务器,进行更改,然后将其放回轮换中即可。由于会话数据全部集中存储在 SQL 中,因此哪个节点响应请求并不重要。
至于软件与硬件以及成本的合理性,这有点棘手。如果你有预算,硬件平衡器是不错的选择。用硬件做事情显然更快,更重要的是,你从硬件供应商那里得到的支持通常要好得多。如今,软件平衡器的功能越来越完善。
而我的大部分经验都集中在 F5-BigIP、Cisco Arrowpoint/CSS 和 Cisco ACS 线路上。我最近开始为我的一位预算有限的咨询客户研究 IIS7 应用程序请求路由 (ARR)。如果您有备用硬件和 Windows 许可证,则无需花费任何费用,而且它看起来功能相当齐全。我很想看看它的表现如何。您可以找到有关ARR 这里。
如果你需要更多具体信息,请告诉我
答案3
我认为你必须对“有效”作出更多的定义。
您想要进行哪种负载平衡?循环、最小负载、地理负载平衡?
您想要进行多深的数据包检查(2 级/3 级,还是 7 级深度数据包检查)?
您需要会话故障转移吗?
您说的是哪种卷?
您希望在哪里完成 SSL 终止?
您的选择从简单的 Windows NLB 到具有 SSL 加速器的全球分布式硬件负载平衡器冗余阵列。对于“最有效”没有最好的答案