apache2-worker + cgi-perl と apache2-prefork + mod_perl - どちらが速いですか? どちらがより少ないリソースを消費しますか?

apache2-worker + cgi-perl と apache2-prefork + mod_perl - どちらが速いですか? どちらがより少ないリソースを消費しますか?

こんにちは。私は Gentoo Linux を使用しています。スレッド化された apache2 で mod_perl を emerging/install できないようです。そこで、cgi-perl で apache2 のワーカー モジュールを使用することと、mod_perl で apache2 の prefork モジュールを使用することの長所と短所を知りたいです。

何がより速いですか? どちらがより少ないリソースを必要としますか? セキュリティの面では、何か違いがありますか?

ありがとう!

答え1

Linux では、prefork apache を mod_perl とともに使用します。スレッド化された MPM は、プロセス作成にコストがかかる Win32 ユーザーにとって大きなメリットです。Linux では、fork() はかなり安価な呼び出しです。ただし、Mod_perl2 の開発者は、mod_perl2 を apache2 + スレッドで動作させるために多大な努力を払っていますが、perl のスレッド モデルはメモリを少し消費します。

私たちは大きなmod_perlアプリケーションを開発していますが、もし今日それを再作成しなければならないとしたら、私はおそらくさまざまなフレームワークの1つを推奨し、FastCGIを使用するか、翻訳FCGI またはネイティブ PSGI/FCGI 機能を備えたフレームワークを使用すると、フロントエンド (nginx、lighttpd、apache2) を選択できます。アプリケーションを chroot して権限を下げることができます (フロントエンドと通信するにはソケットのみが必要です)。アプリケーションで mod_perl2 を使用する場合は、Apache2 とほぼ連動します。

答え2

私見では、prefork+mod_per の方がはるかに高速ですが、mod_perl メーリングリストで質問するとより正確な回答が得られるでしょう。

答え3

Modperl は Catalyst の完璧なアダプタです。Modpython と Modwsgi が Django 用であり、modphp が Cakephp 用であるのと同じです。一方、Modruby は cgi より優れているか劣っているかで議論されています。fcgi と (Modrails/Modpassenger/Modlocomotive) は、特にスレッド モードを使用する場合に Rails 用です (ただし、代替として Modrake とプロキシ Mongrel アプリケーション サーバーがあります)。デメリットを回避し、メリットのみを得るには、常にフォーク モードを使用します。ここでは、Rails にインスパイアされた他のプログラミング言語の MVC のみを参照しています。つまり、Catalyst、Django、Cakephp、Rails です。

私の意見では、マルチフォークの mpm-itk-mode が最適で、次にマルチスレッドの mpm-event-mode、次にシングルフォークの mpm-prefork-mode、最後にシングルスレッドの mpm-worker-mode が続きます。

一部のプログラミング言語では、mod-php や mod-tcl などのそれぞれの apache2 アダプタが、特に prefork モードでのみ実行され、itk モードでも実行されないことがわかりました。一方、mod-ruby はまだ linux-apache2 でのみ実行され、windows-apache2 にはまだ組み込まれていません。

しかし、幸いなことに、mode-perl、mod-python、mod-ruby はより汎用性が高く、4 つのモードすべて (libapache-mpm-worker モード、libapache-mpm-prefork モード、libapache-mpm-event モード、libapache-mpm-itk モード) で実行できます。これは、perl、python、ruby のユーザーにとっては朗報ですが、もちろん、3 つのアダプタすべての場合でも、フォーク モードはスレッド モードよりも高速で、汎用性が高く、競合がありません。そして、確かなことが 1 つあります。これらのアダプタはすべて、cgi よりも高速に実行できるように設計されており、おそらく fcgi (fastcgi) と同じくらい高速です。

私は、たとえ prefork (シングルフォーク) モードを必要とする一部のソフトウェアが利用できなくなるとしても、itk (マルチフォーク) モードを使用します。

私はUbuntuで常にitkモードを好んでおり、前提条件としてpreforkモードを必要とするアプリケーションをインストールすることを決して選択しませんでした。GentooフレーバーのSabayonなどの一部のディストリビューションでは、デフォルトでapache2をワーカーモードでインストールします。ただし、apacheシステム構成ファイルを編集して、次の行のコメントを解除することで、いつでもこれを変更できます。えっと(そして、ワーカー) を実行してから、apache2 を再コンパイルして再起動します。したがって、Sabayon に適用されるものは Gentoo にも適用されます。Sabayon と Gentoo は、prefork 依存またはワーカー依存のソフトウェアをすべてインストールしますが、設定中は、システムによって依存関係が満たされているものだけを実行する必要があります。

大きな影響を受けているのは、実行に失敗する PHP ベースのフレームワーク (コンテンツ管理システムに必要) の一部です。itk、イベント (およびおそらくワーカー) モードで実行できる唯一の PHP フレームワークは cake-php ですが、残念ながらこれを使用している人はほとんどいません。より有名な horde (php) フレームワークでも動作すると思います。

スレッドがフォークよりも悪いというもう一つの証拠は、Windows で見られるように、2 つ以上の Web サーバー アダプターが互いに対して、およびシステムに対して持つ競合の数を見ることです。

Windows の場合、prefork モードと itk モードは不可能なので、apache2 はワーカー モードで構成されますが、イベント モードは十分に可能です。したがって、apache2 イベント (マルチスレッド) モードに切り替えると、ほとんどの問題が解決されるはずです。ただし、apache2 は modperl (したがって perl-catalyst mvc)、modpython (したがって django mvc) に対して非常に柔軟でカスタマイズ可能ですが、windows-modruby はまだ安定しておらず、modpassenger (modpassenger -- linux、modrails -- windows、locomotive -- macosx) として知られる同等のものが abyss-webserver または lighttpd-webserver (したがって rails mvc) に存在します。

注意事項: システムが Windows の場合、Perl/Python/Ruby/PHP/Tcl の MVC をインストールする前に、すべてが 1 つの Web サーバー (apache2 または lighttpd、あるいは cherokee) のみで構成されていることを確認してください。Rails を abyss、modrails とともに使用する場合は、drupal/jhoomla 構成に wamp、modphp が存在しないことを確認してください。そうしないと、Windows XP のデフォルトの Windows シェルがクラッシュすることがあります (Windows XP で reactos-shell、emerge-desktop、sharp-enviro、bblean-blackbox などの代替シェルと、ros-explorer、cubic-explorer、ultra-explorer などの代替ファイル マネージャーを使用することで、回復できます。ただし、ユーザーが同じ OS を異なる外観のデスクトップ シェルとファイル マネージャーで適応して使用することを気にしない場合に限ります)。

そのため、Windows では、modrails は modphp と競合します (安定した modruby が利用可能になるまで)。また、asp ベースの windows-desktop-shell (windows ネットワーク オブジェクト モデル環境) は一度に 1 つしか保持できませんが、コードブロックで記述された代替シェル (reactos および emerging-desktop) はクラッシュしません。一方、delphi で記述された代替シェル (sharp-enviro) は部分的にクラッシュしますが、sharp-enviro の lazarus リメイクはクラッシュしないはずです。

したがって、Linux ウェブ テクノロジーがはるかに多様でありながら成功している理由の 1 つは、スレッド モードよりもフォーク モードの方が優れている点です。Windows ウェブ テクノロジーは、依然として、多くの努力を重ねた結果、少数のプレーヤーといくつかのオープンソース テクノロジーを中心に展開されています。

答え4

追加情報ですが、Win32 上の mod_perl を廃止し、Plack を使用して PSGI に切り替えました。CGI::Application には互換性レイヤーがあり、非常にうまく機能しています。Catalyst も PSGI に切り替えています (切り替えました)。

関連情報