14 の HTTP クライアント要求からの応答を集約するサービスにpumaサーバーを使用しています。リクエスト間に依存関係がありますが、あるレベルで並列化できます。ruby/cpu 時間はわずか 50 ミリ秒 (97.3% IO) ですが、各リクエストには 1.8 秒かかります。
現在、私はそれぞれ 25 スレッドの 2 つのプロセスで自動スケーリングされた heroku dyno を使用しています。Elyasinの主張に同意するので、MRI/CRubyを使用して、jRubyがスケーラビリティを大幅に向上させると仮定します。
Puma は、他の要求が IO でブロックされている間、同時要求をうまく処理しています。しかし、ノンブロッキング方式で HTTP クライアント リクエストを並行処理する必要があり、計画しています。
私のシナリオでジュビリーを使用してvert.xをベンチマークする前に。EventMachine::MultiRequestやCelluloidなどの標準的な ruby オプション、またはその他の推奨オプションをベンチマークしたいと考えています。event-machine を使用した puma よりも jubilee/vert.x の方がどれだけパフォーマンスが優れているかを実際に知るために。Ruby ベンチマークとジュビリーを参照してください。
そして私の質問は次のとおりです。
- Puma に最適な代替手段はどれですか?
- 最適な Puma のイベント ループが機能し、 EM::HttpRequest (たとえば) が応答を「ブロックせずに待機」しているときに Puma が同時要求を処理できるようにする方法で設計されている代替手段はどれですか?
- それを達成するために使用する必要がある EventMachine/Celluloid の特定の構成または使用法はありますか?
- 全体として、このシナリオに関するご意見をお待ちしております。