web-dev-qa-db-ja.com

Rails / Passenger用のバックエンド対応のロードバランサーはありますか?

3つのRuby on Railsアプリケーション(A、B、C)が多数のアプリケーションサーバーにインストールされています。フロントエンドはHAProxy、バックエンドはApache + Phusion Passenger。元々、3つすべてのRailsアプリが各アプリケーションサーバーにインストールされていましたが、HAProxyが指定されたRails =アプリケーションは特定のバックアップサーバーで「ホット」です。

enter image description here

各パッセンジャーインスタンスは、最大8つのRailsアプリケーションインスタンスを実行するように構成されています。

次のシナリオを検討してください(簡略化):

  1. アプリAに対する8つの同時リクエストが着信し、HAProxyはそれらすべてを最初のアプリケーションサーバーにディスパッチします。これは、残りが他のリクエストで「非常にビジー」であるためです。
  2. 乗客は、このサーバーでアプリAの8つのインスタンスを起動します。
  3. 他のアプリサーバーがまだビジー状態であるため、アプリBに対して別のリクエストが届きます。アプリBも最初のアプリケーションサーバーにディスパッチされます。
  4. ここで、乗客はアプリAのインスタンスの1つをシャットダウンし、アプリBのインスタンスを1つ作成する必要があります。

1分あたりのリクエスト数が1トンの場合の大きなスキームでは、3つすべてRailsアプリは各アプリサーバーで頻繁に開始および停止します、遅い

完璧な世界では、アプリケーションは一度起動すると、シャットダウンして再起動することなく、多くのリクエストを処理します。そのため、アプリサーバーを3つに分割する必要がありましたRailsアプリ:

  • アプリAは13台のサーバーで実行されます。
  • アプリBは5台のサーバーで実行されます。
  • アプリCは2台のサーバーで実行されます。

質問:バックエンドを「認識」し、次の情報を認識して使用して負荷を分散するロードバランサーソフトウェアはありますか。

  • 各バックエンドサーバーが現在アクティブ/ホットになっている各アプリケーションのインスタンスはいくつありますか?
  • それらのインスタンスのうち、現在リクエストを処理しているのはいくつですか?
  • 現在の平均 1分/時間あたりの特定のアプリケーションのリクエスト数はいくつですか?
  • あるアプリケーションを「ランプダウン」し、別のアプリケーションを「ランプアップ」する必要がありますか?

アイデアは、すべてのアプリがインストールされた多数の「同種の」(同じ)アプリケーションサーバーを用意することです。これにより、新しいサーバーを追加してすべてのアプリの全体的な容量を増やすことができますが、特定のアプリの容量は「非常にスマートな」ロードバランサー。アプリを頻繁に起動および停止しなくても、アプリごとの容量を制御できます。

6
Alex Kaushovik

知りません。

私も同様の問題に直面しています。現時点での最善の解決策は、アプリサーバーの負荷を追跡でき、追跡対象に基づいてロードバランサーの構成をいじることができる管理レイヤーを構築することであると思われます。ただし、これは完全にカスタムビルドされたソリューションであり、まだ作成を開始していません。

3
sysadmin1138