Xpisme's Blog

FPM

FPM

FPM(FastCGI进程管理器),那什么是FastCGI?
先来了解下CGI,在来说下FastCGI就清楚了。

CGI:通用网关接口(Common Gateway Interface/CGI),简单来讲就是web服务器与CGI程序之间的一种协议。
CGI本质上是一种协议,CGI程序可以理解成一门语言(PHP/Python/…)
CGI协议理解成 Web Server(Nginx)传递给CGI程序的规范,有url、查询字符串、POST数据、HTTP header等,CGI协议就是规定要传哪些数据、以什么样的格式传递给后方,处理这个请求的协议。
CGI协议:以nginx和php为例,我们可以理解为,这是php在与nginx服务器之间交互时,对传输数据的一种约定。

CGI程序实现的原理
CGI程序运行在独立的进程中,并对每个Web请求创建一个进程,但效率很差。
nginx+php为例,每个web请求,都创建一个进程,然后该进程中,php解析器会解析配置文件、初始化执行环境。
CGI程序对每个请求都会执行这些步骤。

FastCGI
Fast CGI意为更快速的CGI。FastCGI,不再对每个web请求建立一个新的进程。而是FastCGI先启动一个master,解析配置文件
然后初始化执行环境、然后在启动多个worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。
FastCGI 本质上是?是协议吗?管理进程的程序?
FPM
FastCGI Process Manager。php-cgi是php的解释器,php-cgi本身能够解析请求,返回结果,但是不能管理进程。能够调度php-cgi进程的程序就是fpm。

php的master和work进程
master进程负责管理work进程、进程的创建
work进程负责处理web server转过来的请求,webserver与php的work进程进行TCP连接时,php的work进程有许多,具体的会维持一个队列 ,从队列中取一个处理请求,所以work进程是阻塞的。
php的work进程仅仅处理一个返回字符串hello world的请求。假设耗时10毫秒,则一个进程的QPS是100;如果处理一个SQL统计信息的请求,耗时200毫秒,则该进程QPS为5。

nginx进程将进程转给php的work的进程,假设nginx的一个进程转一个请求耗时10毫秒,假设一个php进程处理一个请求耗时100毫秒。则一个nginx进程对应10个php进程。开多了nginx进程也只是等着。
xpisme wechat
微信号