2010-11-14 129 views
0

我有一个Web服务在3台服务器上运行。服务如下 - 服务器1接收用户请求将其存储在本地数据库并对其执行一些操作。 - 服务器2和3是相同的,主要工作马匹,它们根据请求从互联网获取信息并将其返回。 - 服务器1通过局域网上的http请求调用服务器2/3(服务器2上有一个php脚本,因此服务器1将其称为http://localip/script.php) - 服务器1有选择地调用服务器2或3(这是为了分发负载) 服务器2/3上的每个查询都需要大约8秒来处理。 现在,当我安装的所有服务器上的监视工具也发现,Server1是有太多的负荷(这表明进程数>关键限值) 这是不是平衡负载的方式吗?我如何减少Server1中的负载?负载平衡跨服务器

回答

1

服务器1是在响应用户传入的请求。所以如果你确定它是瓶颈,那么你需要把注意力集中在那里。

如果服务器2和3只执行查询到互联网,那么他们可能没有做太多的工作处理器/磁​​盘明智的。

如果配置做一个相当容易的任务2台服务器,且主要面向用户的服务器过载,它可能是更好的只是运行所有3台服务器作为面向用户的。

从您所描述的情况来看,听起来像服务器#1阻塞了服务器的响应3,这意味着它必须保持打开许多可能的连接。如果服务器实际上没有那么多的工作,因为他们的任务只是因特网查询,那么通过将面向用户的服务器和查询引擎合并到一台服务器并在所有3台服务器之间分配用户负载可能会更好。 。

这样,每个服务器具有较少的开放用户连接。而且查询引擎仍然不占用资源(如果它只是Web请求),所以它不会对用户性能产生负面影响。

只是对你的一些想法。如果不知道更多关于应用程序的信息,则无法完全确定。

补充意见

正如评论你应该考虑一个适当的负载平衡器提到,良好的硬件负载均衡器是第一个建议。你在哪里运行你的服务器?如果他们位于Amazon EC2,Rackspace等云数据中心,那么您可以轻松获得负载平衡服务。

您还可以使用软件负载平衡器。 Apache提供此功能,即使:

http://httpd.apache.org/docs/current/mod/mod_proxy_balancer.html

即使当前的配置将有可能把阿帕奇在一台服务器的前面,然后调整它,以便与Apache服务器(在做负载均衡)获得较低的流量百分比,以抵消Apache服务器的费用。在这种情况下,您不需要更换硬件。虽然你有一个明显的单点故障,与目前的情况不同,但一个合适的负载平衡器通常可以缓解目前在架构中遇到的单点故障问题。

+0

服务器2和3从互联网获取信息并将其返回到服务器1,这意味着服务器2和3阻止服务器1,而不是另一个方向 – ajreal 2010-11-14 05:19:53

+0

@ajreal实际上这是一个移动服务,当用户向某个号码发送短信时它击中我们的IP即服务器1.我不能设置每个短信打不同的IP。所以我必须以某种方式从服务器1拆分负载 – 2010-11-14 06:12:52

+0

@Ashwin - 当然,你可以,市场上有很多负载均衡器硬件,你只需要配置一个虚拟IP作为公共IP,当你的负载均衡器硬件接收请求,它可以按照请求到服务器1到N – ajreal 2010-11-15 04:54:57