(转) 网站性能-cgi fastcgi mod_php相关概念整理

Junzizhiai 2011-02-16

原文在这里

CGI英文全称是 Common Gateway Interface,通常翻译为共同网关接口,是HTTP服务器与机器上的其他程序进行通信的一个接口。这个“其他程序”可以使用任何计算机语言来编写,它通过CGI这个接口从HTTP服务器取得输入,然后把运行的结果又通过CGI这个接口交给HTTP服务器,而HTTP服务器把这个结果送给浏览器。

从上面看,CGI所要实现的不过是动态网页而已,这种处理方式的特点就是每接到一个请求,webserver都要fork出一个单独的cgi程序的进程来处理,这种方式的好处是把webserver和具体的程序处理独立开来,结构清晰,可控性强,同时缺点就是如果在高访问需求的情况下,cgi的进程fork就会成为很大的服务器负担,想象一下数百个并发请求导致服务器fork出数百个进程就明白了。这也是为什么cgi一直背负性能低下,高资源消耗的恶名的原因。

相应的有问题就有解决方案,目前流行的方案就是使用模块设计,基本上目前的web server都有相应的模块机制来扩充它的功能,只要按照其设计规范设计出来的模块,就能插入到web server自身的进程处理,因此性能有很大改观,例如IIS的isapi,apache的dso。     mod_php就是把PHP做为APACHE一个内置模块。让apache http服务器本身能够支持PHP语言,不需要每一个请求就启动PHP解释器来解释PHP。 但是,这种方法也不是没有缺点的,例如对于不同的web server,要按照不同标准开发,无法做到webserver无关性;例如这将输入验证的工作转交给了web server,没办法自由处理;例如一旦出现问题将影响整个web server处理流程;例如插入web server进程导致的无法以多用户标示运行,无法处理虚拟主机权限等。

所幸我们还有另外的选择,这就是fastcgi。fastcgi是基于cgi架构的扩展,他的核心思想就是在webserver和具体cgi程序之间建立一个智能的可持续的中间层,统管cgi程序的运行,这样webserver只需要将请求提交给这个层,这个层再派生出几个可复用的cgi程序实例,然后再把请求分发给这些实例,这些实例是可控的,可持续,可复用的,因此一方面避免了进程反复fork,另一方面又可以通过中间层的控制和探测机制来监视这些实例的运行情况,根据不同的状况fork或者回收实例,达到灵活性和稳定性兼得的目的。

   百度百科关于FastCGI

       1. FastCGI 像是一个常驻 (long-live) 型的 CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去 fork 一次 (这是 CGI 最为人诟病的 fork-and-execute 模式)。

2.FastCGI可在任何平台上使用,NetscapeEnterprise及IIS都有FastCGI的模块可供使用,阿帕契(Apache,以及利用Apache衍生出做的服务器)上也有mod_fastcgi可用。

3.FastCGI支持C/C++,Ruby,PHP,Perl,Tcl,Java,Python等程序语言。

4.FastCGI的应用程序亦兼容于CGI。即FastCGI的应用程序也可以当成CGI来执行。

5.现有的CGI程序要改写成FastCGI非常简单,最少可能只需要多加入三行程序代码。

6.FastCGI的侦错方式与CGI大同小异,只要带入程序所需的环境变量及参数,即可在命令列模式执行或侦错。

7.FastCGI应用程序的写作方式与CGI类似,除了几项原则要特别注意外,FastCGI的写作方式跟CGI几乎一样,与学习WebServerAPI比较起来,FastCGI简单多了。

  8. FastCGI 支授分布式运算 (distributed computing),即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。

----------------- EOF ----------------------

相关推荐