アプリケーションが他のサービスへの 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 よりも多くの機能を備えているため、多くの利点があります。たとえば、帯域外ガベージ コレクションがあり、トラフィックに基づいてプロセス数を動的に調整でき、ローリング リスタートが完全に自動化されるため、スクリプトは不要です。 .
詳細については、この記事にも興味があるかもしれません。