我们在多台应用服务器上安装了 3 个 Ruby on Rails 应用程序(A、B 和 C)。我们的前端是 HAProxy,后端是 Apache + Phusion Passenger。最初,我们在每台应用服务器上都安装了所有 3 个 Rails 应用程序,但这种设置很慢,因为 HAProxy“不知道”给定的 Rails 应用程序在给定的后端服务器上是否“热门”。
每个乘客实例配置为运行最多 8 个 Rails 应用程序实例。
考虑以下场景(简化):
- 应用程序 A 同时收到 8 个请求,HAProxy 将它们全部分派到第一个应用程序服务器,因为其余服务器都“忙于”处理其他请求。
- Passenger 在此服务器上启动了应用程序 A 的 8 个实例。
- 应用程序 B 收到另一个请求,由于其他应用服务器仍然太忙,该请求也被分派到第一个应用服务器。
- 现在 Passenger 必须关闭应用程序 A 的一个实例并创建应用程序 B 的一个实例。
从大局来看,当每分钟有大量请求时,所有 3 个 Rails 应用程序都会在每个应用服务器上频繁启动和停止,很慢。
在理想的世界中,应用程序只需启动一次即可处理大量请求,而无需关闭并重新启动。这就是为什么我们必须将应用服务器划分为 3 个 Rails 应用程序的原因:
- 应用程序 A 在 13 台服务器上运行。
- 应用程序 B 在 5 台服务器上运行。
- 应用程序 C 在 2 台服务器上运行。
问题:是否存在“了解”后端并且知道并使用以下信息来平衡负载的负载平衡器软件:
- 每个后端服务器当前每个应用程序有多少个活跃/热门实例?
- 其中有多少个实例当前正在处理请求?
- 目前平均的每分钟/小时给定应用程序的请求数?
- 是否有必要“减少”一个应用程序并“增加”另一个应用程序?
这个想法是拥有多个安装了所有应用程序的“同质”(相同)应用服务器,以便我们可以添加新服务器来增加所有应用程序的总体容量,但给定应用程序的容量取决于“非常智能”的负载平衡器,它可以控制每个应用程序的容量,而不必频繁启动和停止应用程序。
答案1
我不知道。
我遇到了类似的问题。目前最好的解决方案似乎是构建一个管理层,该管理层能够跟踪应用服务器上的负载,并可以根据跟踪的内容调整负载均衡器的配置。不过,这将是一个完全定制的解决方案,我们还没有开始编写它。