CGI、FastCGI和php-fpm

分类: 开发语言 > PHP

CGI(Common Gateway Interface)

    公共网关接口,是外部扩展应用程序与 Web 服务器交互的一个标准接口。用于HTTP服务器与其它机器上的程序服务通信交流的一种工具,CGI程序须运行在网络服务器上。在遇到连接请求(用户请求),首先创建CGI的子进程,然后CGI子进程处理请求,处理完后结束这个子进程,这就是fork-and-execute模式

    CGI方式的服务器有多少连接请求就会有多少个CGI子进程,每个子进程都需要启动CGI解释器、加载配置、连接其他服务器等初始化工作,这是cgi性能低下的主要原因,当用户请求数量非常多的时候,会大量挤占系统的资源如内存、CPU时间等,造成的后果就是性能低下

        1. web 服务器收到客户端(浏览器)的请求Http Request,启动CGI程序,并通过环境变量、标准输入传递数据

        2. cgi进程启动解析器、加载配置(如业务相关配置)、连接其它服务器(如数据库服务器)、逻辑处理等

        3. cgi程将处理结果通过标准输出、标准错误,传递给web 服务器

        4. web 服务器收到cgi返回的结果,构建Http Response返回给客户端,并杀死cgi进程

    web服务器与cgi通过环境变量、标准输入、标准输出、标准错误互相传递数据。

    CGI使外部程序与Web服务器之间交互成为可能。CGI程式运行在独立的进程中,并对每个Web请求建立一个进程,这种方法非常容易实现,但效率很差,难以扩展。面对大量请求,进程的大量建立和消亡使操作系统性能大大下降。此外,由于地址空间无法共享,也限制了资源重用。


FASTCGI:

    快速通用网关接口(Fast Common Gateway Interface/FastCGI)是通用网关接口(CGI)的改进,描述了客户端和服务器程序之间传输数据的一种标准。FastCGI致力于减少Web服务器与CGI程式之间互动的开销,从而使服务器可以同时处理更多的Web请求。与为每个请求创建一个新的进程不同,FastCGI使用持续的进程来处理一连串的请求。这些进程由FastCGI进程管理器管理,而不是web服务器。

  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中)的下一个连接。


PHP-FPM

    PHP FastCGI 进程管理器(PHP FastCGI Process Manager),用于管理PHP 进程池的软件,用于接受web服务器的请求。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置。

    (1). 为什么会出现php-fpm:fpm的出现全部因为php-fastcgi出现。为了很好的管理php-fastcgi而实现的一个程序

    (2). 什么是php-fastcgi:php-fastcgi 只是一个cgi程序,只会解析php请求,并且返回结果,不会管理(因此才出现的php-fpm)。

    (3). fastcgi这么好,启动的worker用完怎么办:当worker不够的时候,master会通过配置里的信息,动态启动worker,等空闲的时候可以收回worker

    (4). php-fpm就是来管理启动一个master进程和多个worker进程的程序.

    PHP-FPM 会创建一个主进程,控制何时以及如何将HTTP请求转发给一个或多个子进程处理。PHP-FPM主进程还控制着什

么时候创建(处理Web应用更多的流量)和销毁(子进程运行时间太久或不再需要了)PHP子进程。PHP-FPM进程池中的每个进程存在的时间都比单个HTTP请求长,可以处

理10、50、100、500或更多的HTTP请求。

来源:原创 发布时间:2022-08-14 21:48:09