lnmp
在使用php開發應用時,我們用的最多的無非就是LNMP、LAMP等架構,這也是PHP開發的經典架構,使用起來簡單好用,可正時因為簡單好用, 使得很多人僅僅停留在會使用的層次上;CGI、FastCGI、php-fpm這些名詞我們經常聽到,但是你真的知道它們在整個架構中處于什么位置發揮什么作用嗎?看完這篇文章,保證你如醍醐灌頂一般,清清楚楚。
http/https
一:CGI是什么?
CGI是一種協議,全稱公共網關接口(Common Gateway Interface),什么是協議,就是一套標準,比如我們平時接觸最多的http/https。CGI專門用在webServer(Nginx、Apache)與CGI程序之間通信,CGI應用程序就是用編程語言編寫的應用程序,前提是這種語言具有標準輸入、輸出以及環境變量,比如php-cgi。
我們的webServer在收到用戶的.php類型的請求,就會把請求提交給cgi程序,這時php-cgi程序根據提交參數進行處理,然后按照標準輸出給webServer相應的html內容,服務器再返回給瀏覽器。整個過程中,CGI扮演了中間人的身份,完全獨立于服務器和應用程序(php-cgi)之外。
然而CGI有個很大的缺點,每一次的web請求都會退出進程,這也意味著每次請求都要重新開啟進程,造成系統資源的浪費,在高并發的場景中,顯然這不是最優的選擇,因此就出現了FastCGI。
二:FastCGI又是什么?
FastCGI,從名字上看,應該是CGI的升級版,可以這么理解吧;不同于CGI的是,FastCGI是一種數據交互的二進制協議,沒錯,它仍然是一種協議,它的目的在于降低webServer與應用程序(php-cgi)之間交互的負載,提高單位時間內請求的吞吐量。
FastCGI使用常駐進程的方式處理請求,這些常駐進程都由FastCGI Server統一管理,跟webServer沒有任何關系,請求過來時,webServer將環境變量和信息通過進程間通訊發送給FastCGI進程,處理完后返回給webServer,服務器再返回給瀏覽器。
萬維網
FastCGI由于常駐進程,在請求量很小的時候仍然占用內存,因此,相比CGI消耗更多的系統的內存。php官方發布的php-cgi是自帶FastCGI管理器的,然而在使用過程中,一旦修改php.ini配置文件,就要kill掉php-cgi進程,重新啟動,不能熱重啟,所以又出現了php-fpm完美解決這個問題。
三:php-fpm厲害在哪?
web server簡單請求過程
PHP-FPM全稱:PHP FastCGI Process Manager,是用于管理php-fastcgi進程的管理器,php-fpm會開啟一個master進程常駐,這個進程用來管理其他子進程work,而work進程則是按需開啟,如果在一定時間段里沒有請求到work進程,work進程就會被關閉,而當請求數量增大時,則會開啟多個work進程來應付大量請求,work進程的最大數量不超過配置進程數。這樣對進程池形成了很好的管理。也完美解決了上述兩個問題。
php架構
怎么樣?是不是感覺其實也沒有想象中那么難理解,理解了這些,以后在解決問題的過程中,就能多幾分把握問題關鍵點的幾率。語言本沒有好壞之分,架構則是一種思維體系,懂架構才能真正在技術的道路上越走越遠。
今天的分享就到這里了,下期見!如果喜歡我的內容,關注我,下期更精彩~~