程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php安裝模式mod_php和Fastcgi的選擇與對比

php安裝模式mod_php和Fastcgi的選擇與對比

編輯:關於PHP編程

      安裝php又面臨到了模式的選擇,以前都是選擇mod_php模式,因為這樣安裝比較方便哈,今天突然關心起FastCGI這種模式,敗毒了一把,找到了一些關於mod_php和Fastcgi的選擇與對比這方面的討論,現在發出來留一個記號,以便進一步研究:

      第一篇:php在apache中安裝模式的區別:fastcgi和mod_php

      說到fastCgi就不得不說Cgi。

      CGI英文全稱是 Common Gateway Interface,通常翻譯為共同網關接口,是HTTP服務器與機器上的其他程序進行通信的一個接口。這個“其他程序”可以使用任何計算機語言來編寫,它通過CGI這個接口從HTTP服務器取得輸入,然後把運行的結果又通過CGI這個接口交給HTTP服務器,而HTTP服務器把這個結果送給浏覽器。

      CGI的出現讓WEB從靜態變為為動態,隨著Web的越來越普及,很多的網站的都需要有動態的頁面,以便與浏覽者互交。CGI方式的缺點也越來越突出。因為HTTP要生成一個動態頁面,系統就必須啟動一個新的進程以運行CGI程序,不斷地fork是一項很消耗時間和資源的工作。這就出現了FastCGI。

      百度百科關於FastCGI

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

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

      4. FastCGI 的應用程序亦兼容於 CGI。即 FastCGI 的應用程序也可以當成 CGI 來執行。

      5. 現有的 CGI 程序要改寫成 FastCGI 非常簡單,最少可能只需要多加入三行程序代碼。

      6. FastCGI 的偵錯方式與 CGI 大同小異,只要帶入程序所需的環境變量及參數,即可在命令列模式執行或偵錯。

      7. FastCGI 應用程序的寫作方式與 CGI 類似,除了幾項原則要特別注意外,FastCGI 的寫作方式跟 CGI 幾乎一樣,與學習 Web Server API 比較起來, FastCGI 簡單多了。

      8. FastCGI 支授分布式運算 (distributed computing),即 FastCGI 程序可以在網站服務器以外的主機上執行並且接受來自其它網站服務器來的請求。

      mod_php就是把PHP做為APACHE一個內置模塊。讓apache http服務器本身能夠支持PHP語言,不需要每一個請求就啟動PHP解釋器來解釋PHP。

      第二篇:mod_php or fastcgi性能比較與選擇

      用php肯定少了不這個問題的選擇,cgi自然就不必說了,但是mod_php和fastcgi的爭論確還是比較多的。

      找了一些資料,晾在這,可供參考。

      首先,性能應該是大家最關心的問題了,除了mod_php和fastcgi 的 benchmark,還有一些服務器差別的測試,如apache vs lighthttpd

      1 mod_php, LightTPD, FastCGI - What’s fastest?

      這個bechmark的結果是 Apache(prefork)+Fastcgi+php的性能是最好的。超過了apache+mod_php,甚至也超過了lightty+fastcgi+php。當然,這個結果得出值相差都很小。另外,以上說的幾個結果都使用了APC加速,使用APC後性能提高1倍以上。

      2 php4-mod-vs-cgi

      這個bechmark是在php4的環境下完成的。其summary.txt的內容如下。

      ------------------------

      PHP4 module, very simple script (phpinfo.php): requests/s

      plain 130.04

      +turckcache 129.42

      +turckcache+zend-optimizer 125.50

      PHP4 module, very complex script (insurance application): requests/s

      plain 1.84

      +turckcache 6.23

      +turckcache+zend-optimizer 5.58

      +optimizer 1.58

      PHP4 CGI, very simple script (phpinfo.php): requests/s

      plain 22.69

      +turckcache n/a*

      +turckcache+zend-optimizer n/a*

      +optimizer 21.23

      PHP4 CGI, very complex script (insurance application): requests/s

      plain 2.00

      +turckcache n/a*

      +turckcache+zend-optimizer n/a*

      +optimizer 1.72

      * = turkcache doesn't support caching of the PHP scripts in CGI mode

      上面的結果我覺得需要關注的是無cache的情況,因為使用mod_php或fastcgi主要還是用來生成動態頁面。前面的cache有更好的工具來實現,如squid。所以,這個結果也是fastcgi勝出,相差也不大。

      3 http://buytaert.net/drupal-performance?page=1

      這個文章的結果和上面兩個剛好相反。使用fastcgi代替mod_php後,”When switching from

      to

      we observe a 63% slowdown for anonymous visitors, and a 18% slowdown for authenticated visitors.”以下是圖表

      另外,benchmark中也做了和lightty的比較,如下圖:

      這個文章的結論是Apache+mod_php性能好於Apache+fastcgi。另外,Apache+mod_php略好於lightty+fastcgi。

      4 最後看看 fastcgi官方自己怎麼說的吧

      Of course, the answer is that it depends upon the application. A more complete answer is that FastCGI often wins by a significant margin, and seldom loses by very much.

      5 結論是,還是根據自己的應用測一下吧….

      最後,個人觀點

      如果mod_php和fastcgi的性能相差不是很大的話,還是傾向於fastcgi的,這種方式畢竟更靈活、安全和簡單。

      1 使用fastcgi,你的web server 可以比較簡單的切換,可以測試不同的服務器,Apache,lightty,ngix 等等,不需要有代碼的修改

      2 如果想換腳本的實現,如不用php,而是改成perl,python之類的,web服務器也不需要任何的改動

      3 web server和fastcgi可以用不同的帳號運行,帶來了一定的安全隔離

     

      4 只在Apache中編個mod_fastcgi可以說是簡單多了,把mod_php編進apache時,出問題時很難定位是php的問題還是apache的問題,我就見過這樣的core,函數調用幾十層,一點頭緒都沒有。

     
    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved