apache2-worker + cgi-perl vs apache2-prefork + mod_perl – 什么更快? 什么需要更less的资源?

你好。 我',使用Gentoo Linux。 看来我不能出现/安装mod_perl与线程apache2,所以我想知道是什么是与cgi-perl使用apache2的工人模块的优点和缺点,并与mod_perl使用apache2的prefork模块

什么更快? 什么需要更less的资源? 安全明智,有什么区别?

谢谢!

在Linux上,使用prefork apache w / mod_perl。 线程MPM对于Win32用户来说是一个巨大的胜利,在这个过程中创build过程非常昂贵。 在linux fork()是一个相当便宜的调用。 然而,Mod_perl2开发者已经花费了很大的精力来使mod_perl2与apache2 +线程一起工作,但是perl中的线程模型有点内存密集。

我们开发了一个大型的mod_perl应用程序,如果今天我们必须重新创build它,我可能会推荐其中一种框架,并使用FastCGI或PSGI 。 使用FCGI或具有本机PSGI / FCGIfunction的框架工作可让您select前端(nginx,lighttpd,apache2)。 你可以chroot你的应用程序,并降低它的权限(它只需要一个套接字来与你的前端对话)。 如果你让你的app使用mod_perl2,那么你已经和Apache2结婚了。

恕我直言,prefork + mod_per会快得多,但要求在mod_perl邮件列表会给你更确切的答案

Modperl是Catalyst的完美适配器,就像Modpython和Modwsgi同样适用于Django,而modphp适用于Cakephp,而Modruby被认为比cgi,fcgi和(Modrails / Modpassenger / Modlocomotive)更好或更差,都是针对Rails特别是在使用线程模式(但有Modrake和代理Mongrel应用程序服务器作为替代)。 为了避免这些缺点并获得优势,请始终使用分叉模式。 我使用的仅仅是其他受rails支持的编程语言的mvc:即Catalyst,Django,Cakephp和Rails。

在我看来,多叉mpm-itk模式是最好的,其次是multithreadingmpm事件模式,然后是单分叉mpm-prefork模式,然后是单线程mpm-worker模式。

我发现对于一些编程语言来说,他们各自的apache2-adapters(如mod-php和mod-tcl)只能在prefork模式下运行,甚至不能在itk模式下运行,而mod-ruby仍然只能在linux-apache2上运行把它变成windows-apache2。

但幸运的是,mode-perl,mod-python和mod-ruby的function更加多样化,可以运行在全部四种模式下 – libapache-mpm-worker模式,libapache-mpm-prefork模式,libapache-mpm-event模式和libapache-mpm-itk模式。 对于perl,python和ruby用户来说,这是一个好消息,但是当然,即使所有三个适配器都是分叉模式,与线程模式相比,分叉模式更快,更通用且无冲突。 有一件事是肯定的:所有这些适配器的devise运行速度都比cgi快,并且可以说和fcgi(fastcgi)一样快。

我使用itk(多叉)模式,即使这意味着我将会丢失一些需要prefork(单分叉)模式的软件。

我一直喜欢Ubuntu中的itk模式,并且从来没有select安装需要prefork模式的应用程序。 一些发行版,如Gentoo风格的Sabayon,默认情况下在工作模式下安装apache2。 但是,我们总是可以通过编辑apache系统configuration文件来改变,并取消注释包含itk的行(并注释worker的行),然后重新编译并重新启动apache2。 所以,凡是适用于Sabayon的,都应该对Gentoo有好处。 Sabayon和Gentoo安装所有依赖于prefork或依赖于工作的软件,但是在configuration它们时,只有那些依赖系统满足的应该运行。

非常困难的一个是一些基于PHP的框架(内容pipe理系统所需的),无法运行。 唯一可以在itk,event(也许是worker)模式下运行的php框架是cake-php,不幸的是很less用到。 我认为,即使是更知名的部落(PHP)框架也应该工作。

另一个certificate线程比分支更糟糕的certificate是通过查看两个或多个web服务器适配器相互之间以及系统之间的数量或冲突,就像我们在Windows中看到的那样。

在Windows的情况下,Apache2configuration工人模式,因为prefork和itk模式是不可能的,但事件模式应该是非常有可能的。 所以,切换到apache2事件(multithreading)模式应该解决大部分问题。 但是apache2对于modperl(以及perl-catalyst mvc),modpython(也就是django mvc)来说是非常灵活和可定制的,但是windows modruby还没有稳定,相当于modpassenger(modpassenger – linux,modrails – 窗户,机车 – macosx)存在于深渊networking服务器或lighttpdnetworking服务器(因此轨道mvc)。

注意事项是:如果系统是windows,那么在安装Perl / Python / Ruby / PHP / Tcl的MVC之前,确保所有东西都只configuration一个webserver – apache2或者lighttpd或者cherokee。 如果你打算使用带深渊的rails,modrails然后确保带有wamp,modphp的drupal / jhoomlaconfiguration不应该存在 – 否则有时候windowsxp的默认windows-shell可能会崩溃(你仍然可以通过使用windowsxp来替代 – shell如emeros-desktop,sharp-enviro,bblean-blackbox等,以及备用文件pipe理器,如ros-explorer,立方体探测器,超级探险器等等 – 只要任何用户不介意适应并使用相同的操作系统与不同外观的桌面shell和文件pipe理器)。

在Windows中,modra与modphp冲突(直到一个稳定的modruby变得可用),并且基于asp的windows-desktop-shell(windowsnetworking对象模型环境)一次只能保存一个,而用代码块(reactos和emerge-desktop)不会崩溃,而用delphi(sharp-enviro)写的那部分会崩溃,但是一个sharp-enviro的lazarus重制不应该崩溃。

因此,Linuxnetworking技术是一个更大的变化,而且成功的原因之一是由于线程模式的分叉模式的优点。 经过大量的努力,windows web技术依旧围绕着less数玩家和一些开源技术。

只是一些额外的信息,我们只是在Win32上转储mod_perl,并使用Plack切换到PSGI。 CGI :: Application有一个兼容层,对我们来说非常好。 催化剂正在切换/已经切换到PSGI。