1分あたりの多くの要求を維持しながら、HTTPリクエストをレールにするにはどうすればよいですか。
-
21-12-2019 - |
質問
毎分20,000以上の要求を処理するためのアプリサーバを拡大縮小しようとしています。
要求を強調したときに、ほとんどの要求は20,000rpm以上の取り扱いを簡単に取り扱います。
しかし、外部HTTPリクエスト(例えば、Facebookログイン)を作成する必要がある要求は、サーバーをクロール(3,000 rpm)に戻します。
私の現在の環境の制限を概念的に理解しています - 3つのユニコーン労働者を持つ3つのロードバランスの取れたサーバーは、それらのすべてがHTTPリクエストを待っていても、一度に12の要求を処理できます。
これをより良いスケーリングのための私のオプションは何ですか?一度にもっと多くの接続を処理したいのですが。
可能な解決策私はそれを理解しているように:
-
ブルートフォース:より多くのユニコーン労働者(すなわち、より多くのRAM)やその他のサーバを使用してください。
-
すべてのブロック操作をバックグラウンド/ワーカープロセスにプッシュして、Webプロセスを解放します。クライアントは、要求が完了したときに見つけるために定期的にポーリングする必要があります。
-
Unicornの代わりに(そしておそらくMRIからRubiniusに)Pumaに移動するので、私はプロセスの代わりにスレッドを使うことができます。増加する労働者
基本的に、私が探しているものは、1人のワーカーが処理することができるブロック/キューに入れられた要求の数を増やすより良い方法がありますか?
たとえば、EventMachineを使ってシンを使うことについての議論を聞いた。これは、現在動作しているWebリクエストをダウンすることができるRails Workerの可能性を開きます(それが外部サーバーで待っているから)そしてそれが待っている間に別の要求を拾うのですか?もしそうなら、これはユニコーンとプーマと比較してパフォーマンスを追求するための価値のある道ですか? (アプリのランタイムアクティビティに強く依存しますか?)
解決
Unicornはシングルスレッドのマルチプロセス同期Appサーバーです。この種の処理には良い試合ではありません。
アプリケーションがI / Oバインドされているように聞こえます。これは、イベント指向のデーモンがあなたの要求を処理することを主張します。
eventmachineとem-http-requestと em-http-server 。