FastCGI 和 PHP-FPM 及相关知识的介绍
我们平时可能经常看到
FastCGI
或者PHP-FPM
,比如说我们在linux上安装php的时候,发现php必须要安装一个PHP-FPM
这样的扩展,甚至现在PHP-FPM
已经成了php的内核了。看了很多资料,还是整合一下,若有更好的见解,请及时提出!
什么是CGI?
CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上.
CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等.
之前我看见一篇文章里面对CGI
解释的非常清楚,CGI是为了保证web server传递过来额数据是标准的,方便CGI程序的编写者。再解释的通俗点就是CGI是一个协议,具有无语言性!
什么是FastCGI?
看到这里,你可能有疑问,那为什么会出现FastCgi呢?其实CGI
有一个令人诟病的地方,而FastCgi
便是为了解决这个问题而诞生的,我这样来描述他们的区别:
我们应该清楚PHP解析器会解析php.ini文件,初始化执行环境,标准的CGI对每个请求都会执行这些步骤(不闲累啊!启动进程很累的说!),所以处理每个请求的时间会比较长。这明显不合理嘛!那么FastCGI是怎么做的呢?首先,FastCGI会先启一个master,解析配置文件,初始化执行环境,然后再启动多个worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然是高。而且当worker不够用时,master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源。这就是FastCGI的对进程的管理。
nice!这样就非常清楚了~
FastCGI的工作原理
1、Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)
2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。
3、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
4、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。
在上述情况中,你可以想象CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。
FastCGI的不足
因为是多进程,所以比CGI多线程消耗更多的服务器内存,PHP-CGI解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数.
为何会出现PHP-FPM呢?
在了解php-fpm之前,其实必须得先了解php-cgi
,what?这个又是什么鬼?其实很简单,php-cgi
就是FastCGI
的的管理器,他有一个明显的缺点,不支持平滑重启,也就是说每次修改php.ini
文件,需要重启 php-cgi
才生效!其次,一旦杀死php-cgi
进程,php便不能运行了!
由此,便诞生了php-fpm
,哈哈!终于来了解这个了~
PHP-FPM
一开始只是一个php的补丁,我们要使用它,必须通过下载的形式,那么,自从php5.3.3
之后,PHP-FPM
便纳入了php的内核,不再作为补丁的形式来使用了,它的优势非常明显:
- PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程
- 可以平滑重载PHP配置
- 比spawn-fcgi具有更多优点
总结
哇!看到这!你可能有点蒙,也可能拨云见日一般清晰明了了,其实这么多内容,之前看到一个人总结的很好,他是这样讲的: 注意!前方高能预警!
你(PHP)去和爱斯基摩人(web服务器,如 Apache、Nginx)谈生意
你说中文(PHP代码),他说爱斯基摩语(C代码),互相听不懂,怎么办?那就都把各自说的话转换成英语(FastCGI 协议)GI
怎么转换呢?你就要使用一个翻译机(PHP-FPM)
(当然对方也有一个翻译机,那个是他自带的)
我们这个翻译机是最新型的,老式的那个(PHP-CGI)被淘汰了。不过它(PHP-FPM)只有年轻人(Linux系统)会用,老头子们(Windows系统)不会摆弄它,只好继续用老式的那个。
哈哈!说的真是形象生动!这也印证了那句话,真理掌握在少数人手里!
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: