あなたはどれをお勧めしますか?どちらが速く、信頼できますか? Apache mod_python または nginx/lighttpd FastCGI?
7 に答える
私は両方を実行しましたが、Apache/mod_python の方が操作しやすく、安定している傾向がありました。しかし、最近は Apache/mod_wsgi に飛びつきました。
- デーモン プロセスの容易な管理。
- その結果、プロセスの分離が大幅に改善されます (同じ Apache 構成で mod_python を使用して複数のサイトを実行すると、ほとんどの場合問題が発生します。これを行うと、環境変数と C 拡張機能がサイト間でリークします)。
- 簡単なコードのリロード (適切に設定すれば、
.wsgi
Apache を再起動する代わりに、ファイルに触れるだけでリロードできます)。 - より予測可能なリソース使用量。mod_python を使用すると、特定の Apache 子プロセスのメモリ使用量が大幅に変動する可能性があります。mod_wsgi を使用すると、かなり安定します。すべてがロードされると、それがどれだけのメモリを使用するかがわかります。
FastCGI を使用した lighttpd は名目上は高速になりますが、実際には Python コードを実行するのにかかる時間とそれが行うデータベース ヒットは、Web サーバー間で得られるパフォーマンス上の利点を完全に小さくします。
mod_python と apache を使用すると、ダイジェスト認証や凝った HTTP ヘッダーの取得/設定などを行うコードを django の外部で書きたい場合に、機能面でもう少し柔軟性が得られます。おそらく、mod_rewrite などの apache の他の組み込み機能を使用したいと思うでしょう。
メモリが問題になる場合は、apache/mod_python に近づかないことが大いに役立ちます。Apache は大量の RAM を使用する傾向があり、すべての Apache 機能に組み込まれている mod_python コードも大量のメモリ空間を占有します。言うまでもなく、apache のマルチプロセスの性質は、各プロセスが最も集中的な要求のサイズに成長するにつれて、より多くの RAM を消費する傾向があります。
mod_wsgi を使用した Nginx
私はnginxでそれを使用しています。それが本当に速いかどうかはわかりませんが、RAM/CPUの負荷は確かに少なくなります。また、複数のDjangoプロセスを実行し、nginxに各URLプレフィックスを異なるソケットにマップさせる方が簡単です。まだnginxのmemcachedモジュールを十分に活用していませんが、最初のテストでは速度が大幅に向上していることが示されています。
mod_wsgiもあります。mod_pythonよりも高速で、デーモンモードはFastCGIと同様に動作します。
WSGI構成をお勧めします。私はapacheを捨てる意味を持ち続けていますが、サーバー上には常にそれを必要としているように見えるレガシーアプリがいくつかあります。さらに、WSGIアプリのエコロジーは非常に多様であり、サーバーとアプリの間でWSGI「ミドルウェア」をデイジーチェーン接続するなどの巧妙なトリックを可能にします。
ただし、現在、一部のアプリとapache mod_wsgi、特に一部のctypesアプリには既知の問題があるため、たとえばctypesを広範囲に使用するgeodjangoを実行しようとする場合は、注意が必要です。私は現在、fastcgiに戻って、これらの問題に取り組んでいます。
個人的には、しばらくの間 (6 か月ほど) FastCGI を使用してきましたが、そのようにページをロードすると、mod___python よりも応答時間が速くなるようです。私にとって重大な理由は、同じ apache / mod_python インストールから複数のサイトを実行する明確な方法が見つからなかったのに対し、FastCGI は比較的簡単だったからです。
ただし、特に徹底的な実験は行っていません:-)
[編集]ただし、経験から言えば、FastCGI のセットアップは最初は少し面倒です。私はガイドを書くことを意味し続けます..!