0

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

4

1 回答 1

1

服务器 1 正在响应来自您的用户的传入请求。因此,如果您确定它是瓶颈,那么您需要将注意力集中在那里。

如果服务器 2 和 3 仅对 Internet 执行查询,那么它们可能不会在处理器/磁​​盘方面做太多工作。

如果您将 2 台服务器配置为执行相当简单的任务,并且您的主要面向用户的服务器正在过载,那么将所有 3 台服务器都作为面向用户运行可能会更好。

根据您的描述,这听起来像 Server#1 正在阻止来自服务器 2 和 3 的响应,这意味着它必须潜在地保持打开许多连接。如果服务器 2 和 3 并不是真的没有那么多工作,因为它们的任务只是互联网查询,您可能会通过将面向用户的服务器和查询引擎合并到一个服务器中并在所有 3 台服务器上分配用户负载来获得更好的服务.

这样,每个服务器打开的用户连接就更少了。并且查询引擎仍然没有占用资源(如果它只是 Web 请求),因此它不会对用户性能产生负面影响。

只是给你一些想法。如果不了解您的应用程序的更多信息,就不可能完全确定。

补充评论

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

您还可以使用软件负载平衡器。Apache 甚至提供了这个功能:

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

即使使用您当前的配置,也可以将 Apache 放在其中一台服务器的前面,然后对其进行调整,以便使用 Apache(进行负载平衡)的服务器获得较低百分比的流量,以抵消 Apache 的费用服务器。在这种情况下,您无需更改硬件。尽管您有明显的单点故障,但与您现在的情况并无不同,但适当的负载均衡器通常可以缓解您当前在架构中遇到的单点故障问题。

于 2010-11-14T05:15:25.967 回答