apache2-worker + cgi-perl 與 apache2-prefork + mod_perl - 哪個比較快?什麼需要更少的資源?

apache2-worker + cgi-perl 與 apache2-prefork + mod_perl - 哪個比較快?什麼需要更少的資源?

嗨。我',使用Gentoo linux。看來我無法使用線程 apache2 出現/安裝 mod_perl 所以我想知道使用 apache2 的工作模組與 cgi-perl 以及使用 apache2 的 prefork 模組與 mod_perl 的優點和缺點是什麼

什麼更快?什麼需要更少的資源?安全方面,有什麼區別嗎?

謝謝!

答案1

在 Linux 上,使用 prefork apache w/ mod_perl。執行緒 MPM 對於 Win32 用戶來說是一個巨大的勝利,因為在 Win32 用戶中進程創建的成本很高。在 Linux 上,fork() 是一個相當便宜的呼叫。然而,Mod_perl2 開發人員已經付出了巨大的努力來使 mod_perl2 能夠與 apache2 + 線程一起工作,但是 perl 中的線程模型有點佔用記憶體。

我們開發了一個大型 mod_perl 應用程序,如果我們今天必須重新創建它,我可能會推薦各種框架之一併使用 FastCGI 或PSGI。使用 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。

我發現對於某些程式語言來說,它們各自的apache2 適配器(例如mod-php 和mod-tcl)專門只在prefork 模式下運行,甚至不在itk 模式下運行,而mod-ruby 仍然只在linux-apache2中運行,而且還沒有使其成為windows-apache2。

但是,幸運的是,mode-perl、mod-python 和 mod-ruby 足夠通用,可以在所有四種模式下運行——libapache-mpm-worker 模式、libapache-mpm-prefork 模式、libapache-mpm-event模式和libapache-mpm-itk 模式。這對 perl、python 和 ruby​​ 用戶來說是個好消息,但當然,即使在所有這三個適配器的情況下,分叉模式也比線程模式更快、更通用且無衝突。有一點是肯定的:所有這些適配器都被設計為比 cgi 運行得更快,並且可以說與 fcgi (fastcgi) 一樣快。

我使用 itk(多分叉)模式,即使這意味著我將缺少一些需要 prefork(單分叉)模式的軟體。

我一直更喜歡 Ubuntu 中的 itk 模式,並且從未選擇安裝需要 prefork 模式作為先決條件的應用程式。一些發行版,例如具有 Gentoo 風格的 Sabayon,預設會以工作模式安裝 apache2。但是我們總是可以透過編輯 apache 系統設定檔並取消註解包含以下內容的行來更改:資訊科技知識庫(並註解掉以下行勞工)然後重新編譯並重新啟動 apache2。因此,無論適用於 Sabayon 的是什麼,也應該適用於 Gentoo。 Sabayon 和 Gentoo 安裝所有依賴 prefork 或依賴worker 的軟體,但是在配置它們時,只有那些依賴關係由系統滿足的軟體才應該運作。

受到嚴重打擊的是一些基於 php 的框架(內容管理系統所需的)無法運作。唯一可以在 itk、事件(也許還有工作)模式下運行的 php 框架是 cake-php,不幸的是很少有人使用。我認為即使是更知名的horde(php)框架也應該可以工作。

執行緒比分叉更糟糕的另一個證據是透過查看兩個或多個網路伺服器適配器之間以及系統之間的衝突數量或衝突,正如我們在 Windows 中看到的那樣。

對於 Windows,apache2 配置為工作模式,因為 prefork 和 itk 模式是不可能的,但事件模式應該是非常可能的。所以,切換到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 之前,請確保僅使用一個 Web 伺服器配置所有內容 - apache2 或 lighttpd 或可能是 cherokee。如果您打算將Rails 與abyss、modrails 結合使用,請確保帶有wamp、modphp 的drupal/jhoomla 配置不應存在——否則有時windowsxp 的預設windows-shell 可能會崩潰(您仍然可以透過使用windowsxp 與替代項來恢復) shell,如 Reactos-shell、emerge-desktop、sharp-enviro、bblean-blackbox 等,以及備用文件管理器,如 ros-explorer、cubic-explorer、ultra explorer 等 - 前提是任何用戶不適應並介意使用相同的作業系統和不同的桌面外殼和檔案管理器)。

在 Windows 中,modrails 與 modphp 發生衝突(直到有穩定的 modruby 可用),並且基於 asp 的 windows-desktop-shell(Windows 網路物件模型環境)一次只能容納一個,而以程式碼區塊編寫的替代 shell (reactos和emerge-desktop)不會崩潰,而那些用delphi 編寫的(sharp-enviro)會部分崩潰,但是lazarus 重製的Sharp-enviro 應該不會崩潰。

因此,Linux Web 技術種類繁多且成功的原因之一是分叉模式相對於線程模式的優勢。 Windows Web 技術在經過大量努力之後,總體上仍然圍繞著較少的參與者和一些開源技術。

答案4

只是一些附加信息,我們剛剛在 Win32 上轉儲 mod_perl 並使用 Plack 切換到 PSGI。 CGI::Application 有一個相容層,對我們來說工作得非常好。 Catalyst 正在切換/已經切換到 PSGI。

相關內容