Rails / Passenger有后端感知的负载平衡器吗?

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

在这里输入图像说明

每个乘客实例都configuration为运行多达8个Rails应用程序实例。

考虑以下情况(简化):

  1. 8个同时请求应用程序A进来,HAProxy将所有这些请求都分配给第一个应用程序服务器,因为其他请求与其他请求“非常繁忙”。
  2. 乘客在此服务器上启动应用程序A的8个实例。
  3. 另一个请求来自应用程序B,它也被分派到第一个应用程序服务器,因为其他应用程序服务器仍然太忙。
  4. 现在,乘客必须closures应用程序A的一个实例并创build应用程序B的一个实例。

在每分钟请求的TON大的情况下,所有3个Rails应用程序在每个应用程序服务器上经常启动和停止, 这是很慢的

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

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

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

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

我们的想法是安装所有应用程序的“同类”(相同)应用程序服务器的数量,以便我们可以添加新的服务器来增加所有应用程序的总体容量,但给定应用程序的容量取决于“非常聪明“的负载平衡器,可以控制每个应用程序的容量,而不必经常启动和停止应用程序。

我不知道一个。

我正面临类似的问题。 目前最好的解决scheme似乎是构build一个pipe理层,能够跟踪应用程序服务器上的负载,并且可以根据正在跟踪的内容来调整负载平衡器的configuration。 这将是一个完全定制的解决scheme,但我们还没有开始写它。