1分あたりの多くの要求を維持しながら、HTTPリクエストをレールにするにはどうすればよいですか。

StackOverflow https://stackoverflow.com//questions/22029333

質問

毎分20,000以上の要求を処理するためのアプリサーバを拡大縮小しようとしています。

要求を強調したときに、ほとんどの要求は20,000rpm以上の取り扱いを簡単に取り扱います。

しかし、外部HTTPリクエスト(例えば、Facebookログイン)を作成する必要がある要求は、サーバーをクロール(3,000 rpm)に戻します。

私の現在の環境の制限を概念的に理解しています - 3つのユニコーン労働者を持つ3つのロードバランスの取れたサーバーは、それらのすべてがHTTPリクエストを待っていても、一度に12の要求を処理できます。

これをより良いスケーリングのための私のオプションは何ですか?一度にもっと多くの接続を処理したいのですが。

可能な解決策私はそれを理解しているように:

  1. ブルートフォース:より多くのユニコーン労働者(すなわち、より多くのRAM)やその他のサーバを使用してください。

  2. すべてのブロック操作をバックグラウンド/ワーカープロセスにプッシュして、Webプロセスを解放します。クライアントは、要求が完了したときに見つけるために定期的にポーリングする必要があります。

  3. Unicornの代わりに(そしておそらくMRIからRubiniusに)Pumaに移動するので、私はプロセスの代わりにスレッドを使うことができます。増加する労働者

  4. 基本的に、私が探しているものは、1人のワーカーが処理することができるブロック/キューに入れられた要求の数を増やすより良い方法がありますか?

    たとえば、EventMachineを使ってシンを使うことについての議論を聞いた。これは、現在動作しているWebリクエストをダウンすることができるRails Workerの可能性を開きます(それが外部サーバーで待っているから)そしてそれが待っている間に別の要求を拾うのですか?もしそうなら、これはユニコーンとプーマと比較してパフォーマンスを追求するための価値のある道ですか? (アプリのランタイムアクティビティに強く依存しますか?)

役に立ちましたか?

解決

Unicornはシングルスレッドのマルチプロセス同期Appサーバーです。この種の処理には良い試合ではありません。

アプリケーションがI / Oバインドされているように聞こえます。これは、イベント指向のデーモンがあなたの要求を処理することを主張します。

eventmachineとem-http-requestと em-http-server

これにより、着信要求をHTTPサーバーと発信中のHTTPサービスコールに非同期的にサービスすることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top