Rails/Passenger 是否有后端感知负载平衡器?

Ale*_*vik 6 load-balancing haproxy ruby-on-rails phusion-passenger high-load

我们在许多应用程序服务器上安装了 3 个 Ruby on Rails 应用程序(A、B 和 C)。我们的前端是 HAProxy,后端是 Apache + Phusion Passenger。最初我们在每个应用程序服务器上都安装了所有 3 个 Rails 应用程序,但是这个设置很慢,因为 HAProxy“不知道”给定的 Rails 应用程序在给定的支持服务器上是否“热”。

在此处输入图片说明

每个乘客实例配置为最多运行 8 个 Rails 应用程序实例。

考虑以下场景(简化):

  1. 应用程序 A 的 8 个同时请求进来,HAProxy 将它们全部调度到第一个应用程序服务器,因为其余请求“非常忙”处理其他请求。
  2. 乘客在此服务器上启动应用程序 A 的 8 个实例。
  3. 另一个请求传入应用程序 B,它也被分派到第一个应用程序服务器,因为其他应用程序服务器仍然太忙。
  4. 现在乘客必须关闭应用程序 A 的一个实例并创建应用程序 B 的一个实例。

在每分钟有大量请求的大计划中,所有 3 个 Rails 应用程序经常在每个应用程序服务器上启动和停止,这很慢

在完美世界中,应用程序启动一次并处理大量请求,而无需关闭和重新启动。这就是为什么我们必须在 3 个 Rails 应用程序之间划分我们的应用程序服务器:

  • 应用程序 A 在 13 个服务器上运行。
  • 应用程序 B 在 5 个服务器上运行。
  • App C 在 2 个服务器上运行。

问题:是否有一个负载均衡器软件可以“感知”后端并且知道并使用以下信息来平衡负载:

  • 每个后端服务器当前有多少个每个应用程序的活动/热实例?
  • 这些实例中有多少当前正在处理请求?
  • 给定应用程序每分钟/小时的当前平均请求数是多少?
  • 是否需要“减少”一个应用程序并“增加”另一个应用程序?

我们的想法是拥有许多安装了所有应用程序的“同质”(相同)应用程序服务器,以便我们可以添加新服务器以增加所有应用程序的整体容量,但给定应用程序的容量取决于“非常智能”的负载均衡器,它可以控制每个应用程序的容量,而不必经常启动和停止应用程序。

sys*_*138 3

我不知道有一个。

我面临着类似的问题。目前,最好的解决方案似乎是构建一个管理层,该管理层能够跟踪应用程序服务器上的负载,并可以根据跟踪的内容调整负载平衡器的配置。不过,这将是一个完全定制的解决方案,我们还没有开始编写它。