为Web应用程序设置负载平衡环境的最佳/正确方法是什么?

时间:2008-12-17 19:45:32

标签: .net web-applications load-balancing

我开发了一个需要在4个Web服务器之间进行负载平衡的Web应用程序。我的公司正在购买负载均衡器硬件(思科)。如何告诉负载均衡器网络服务器应该在轮换中存在混淆。

IT硬件支持团队希望我创建一个位于主Web应用程序旁边的单页Web应用程序。我被告知这个小的单页应用程序应该调用数据库并在表上执行INSERT,UPDATE和DELETE。然后,应用程序应返回状态代码,然后负载均衡器将能够读取并确定是否将此Web服务器保留在轮换中。此应用程序必须驻留在所有负载平衡服务器上。然后负载均衡器每5秒轮询一页应用程序。

我认为这听起来像是一个绝对的HACK。这听起来像数据库上不必要的工作和开销。硬件团队试图说服我这是正确的方法。我完全不同意!我的论点是负载均衡器不应该关心数据库连接。我们只是试图在4个Web服务器上分配负载。需要注意的一点是,如果没有数据库连接,主Web应用程序将毫无用处。

负载均衡器本身是否有办法确定服务器是否应该在轮换中?这样做的正确方法是什么?

4 个答案:

答案 0 :(得分:2)

阅读Scalable Internet Architectures

平衡器只能看到Web服务器。如果Web服务器出现,但无法与数据库通信(因为,例如,Apache正在运行但您的应用程序已损坏),那么当应用程序被破坏时,您将遇到无响应服务器获取请求的问题

我们有一个自我测试应用程序返回一些状态。目前用于调试。将来,将与其他HA和负载共享解决方案一起使用。

答案 1 :(得分:1)

我总是在网络服务器上放一个真正简单的html页面。如果来自status.html的HTTP状态返回200,则将服务器保持在轮换中,如果没有,则暂停Web服务器。

如果您的数据库严重失败怎么办?当您正在恢复时,您应该能够发出状态消息“抱歉,很快就会回来”。您也不希望重新配置负载均衡器。您的应用程序中没有可以在没有DB的情况下运行的部分吗?

答案 2 :(得分:1)

这不是黑客攻击,而是检查 Web服务器的心跳的常用方法。但是,查询该页面中的数据库是有争议的。例如,如果数据库超时,您最终可能无法在群集中使用Web服务器。

答案 3 :(得分:1)

我认为这是一个黑客攻击。负载均衡器应该只使用一个简单的html页面来返回负载均衡器,就像JWMiller所说的那样。我们在所有应用程序中使用此方法。 检查数据库连接,远程服务等是应用程序运行状况检查的工作,应该是一个单独的功能。