6

アプリケーション サーバーには非常に多くの選択肢 (Passenger、Thin、Unicorn、Mongrel、Puma、Rainbows!) があるため、次のシナリオにはどれが適しているのか疑問に思っています。

Rails は純粋に API バックエンドに使用されます (すべてのアセットは Nginx で提供されます)。一部の API 呼び出しは他の API サービスに依存しているため、完了するまでに時間がかかる場合があります。

レスポンシブ アプリはモバイル、タブレット、およびデスクトップ クライアントで使用されるため、クライアントの接続については保証されません。

この場合、どのアプリケーションサーバーが適切だと思いますか? 選択する際に考慮すべきことは何ですか?

4

3 に答える 3

13

アプリケーションが他のサービスへの API 呼び出しを行う場合、Unicorn は適切な選択ではありません。Unicorn は、高速で短時間の CPU バウンド ワークロード向けに明示的に設計された、シングル スレッドのマルチプロセス アプリケーション サーバーです。HTTP API 呼び出しの実行は、実行時間の長いブロッキング I/O 要求としてカウントされます。これは制限ではなく、Unicorn の明示的な設計上の選択です。これは、Unicorn Web サイトの「Just Worse in Some Cases」セクションで確認されています。

理論的には、Thin はイベント化された I/O を使用するため、このような同時実行性の高いワークロードを処理できます。ただし、これには、イベント化されたコードの形式で明示的なフレームワークとアプリケーションのサポートが必要です。これを行うフレームワークやアプリケーションはほとんどありません。Rails と Sinatra にはありません。

したがって、これにより、マルチスレッド対応のアプリケーション サーバーのみが残ります。3 つの候補は、Puma、Rainbows、Phusion Passenger 4 Enterpriseです。

  • プーマは比較的新しいです。Rainbows は少し古いですが、作者はそれがうまく動作するかどうかについて保証しません。Phusion Passenger は成熟しており、何年も前から存在しており、現在、Pixar、New York Times、AirBnB などの大規模なものを含む 150,000 以上の Web サイトで使用されています。
  • Puma と Rainbows の使用モデルは、一連のプロセスを開始し、リバース プロキシ構成を介してそれらを Nginx にフックするという点で、Unicorn と Thin に似ています。一方、Phusion Passenger は Nginx に直接統合するように設計されているため、構成、プロセス管理、およびその他の管理オーバーヘッドが大幅に削減されます。
  • Phusion Passenger 4 Enterprise は厳密なマルチスレッド サーバーではなく、ハイブリッド マルチプロセス/マルチスレッド サーバーです。これは、複数のプロセスを実行できることを意味し (安定性を高め、複数の CPU コアを使用できるようにするため)、それぞれに複数のスレッドを使用します (I/O の同時実行性を高めるため)。
  • Phusion Passenger 4 Enterprise は、Puma や Rainbows よりも多くの機能を備えているため、多くの利点があります。たとえば、帯域外ガベージ コレクションがあり、トラフィックに基づいてプロセス数を動的に調整でき、ローリング リスタートが完全に自動化されるため、スクリプトは不要です。 .

詳細については、この記事にも興味があるかもしれません。

于 2013-03-15T15:13:13.447 に答える
3

知るための1つの真の方法は、実際の条件でパフォーマンスをテストおよび測定することです。それ以外は仮定と推測になります。

それまでの間は、十分に優れていることがわかっているものから始めて(ユニコーンはかなり人気があり、まともな選択のようです)、ボトルネックになったらサーバーのパフォーマンスに対処する必要があります。

于 2013-02-14T13:24:50.060 に答える
2

スタンドアロンの要件に基づいて、nginx リバース プロキシの背後にある Puma または Unicorn サーバーをお勧めします。ワーカー キューには sidekiq を使用します。これは Rails アプリを想定しています。Sinatra を使用している場合は、thin で十分かもしれません。他の人が言ったように、テストのパフォーマンスよりも安定性のために最初に書きます。

于 2013-02-14T23:13:51.007 に答える