我们有一个系统,在多个tomcats前面有一个Apache实例.然后这些tomcats连接到各种数据库.我们使用mod_proxy_balancer来平衡负载到tomcat.
目前我们每秒接收100个请求,Apache服务器上的负载非常低,但是由于数据库在tomcats上的大量操作,负载大约有25%(我估计他们可以处理).
在几周内发生了一件事,我们估计我们的请求会大幅增加,可能会增加10倍.
我正在做我能做的一切,减少我们的tomcats的负担,但我知道我们将耗尽容量,所以我想优雅地失败.我的意思是,我不是试图处理所有超时的太多连接,而是希望Apache以某种方式监视平均响应时间,并且一旦Tomcat的响应时间超过某个阈值,我想要一个错误页面显示.
这意味着幸运的用户仍然可以快速呈现页面,而那些不幸的用户会快速获得错误页面.而不是每个人都等待他们的页面太长,最终每个人都超时,数据库被淹没了从未使用过的查询.
希望这是有道理的,所以我一直在寻找有关如何实现这一目标的建议.
谢谢
解决方法
我称之为“对不起服务器”.如果您使用的是Apache 2.2,则可以将另一台主机添加到LB池作为热备用,当实际的应用服务器达到容量时,您的平衡器会将请求定向到“对不起服务器”,直到应用服务器再次可用.这是一个粗略的想法:
<Proxy balancer://yourapp> BalancerMember http://10.0.0.1:8080 retry=5 max=50 BalancerMember http://10.0.0.2:8080 retry=5 max=50 BalancerMember http://10.0.0.3:8080 retry=5 max=50 BalancerMember http://10.0.0.4:8080 retry=5 max=50 # the hot standby on server2 BalancerMember http://10.0.0.5:80 status=+H </Proxy> <Location /app> ProxyPass balancer://yourapp </Location>