fastcgi

生活百科 2023-01-26 08:58生活百科www.aizhengw.cn

fastcgi

CGI全称是“通用网关接口”(Common Gateway Interface),HTTP伺服器与你的或其它机器上的程式进行“交谈”的一种工具,其程式一般运行在网路伺服器上。 CGI可以用任何一种语言编写,只要这种语言具有标準输入、输出和环境变数。如php,perl,tcl等。

基本介绍

  • 中文名通用网关接口
  • 外文名Common Gateway Interface
  • 缩写CGI
  • 运行在网路伺服器上

FastCGI

FastCGI全称 快速通用网关接口(FastCommonGatewayInterface)。
FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分散式的运算, 即 FastCGI 程式可以在网站伺服器以外的主机上执行并且接受来自其它网站伺服器来的请求。
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在记忆体中并获得较高的性能。众所周知,CGI解释器的反覆载入是CGI性能低下的主要原因,如果CGI解释器保持在记忆体中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。

原理

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)可以工作。

特点

1、如CGI,FastCGI也具有语言无关性。
2、如CGI, FastCGI在进程中的应用程式,独立于核心web伺服器运行,提供了一个比API更安全的环境。(API是把应用程式的代码与核心的web伺服器连结在一起,这意味着在一个错误的API的应用程式可能会损坏其他应用程式或核心伺服器; 恶意的API的应用程式代码甚至可以窃取另一个应用程式或核心伺服器的密钥。)
3、FastCGI技术目前支持语言有 PHP、C/C++、Java、Perl、Tcl、Python、SmallTalk、Ruby、Aardio等。相关模组在Apache,IIS, Lighttpd,Nginx等流行的伺服器上也是可用的。
4、如CGI,FastCGI的不依赖于任何Web伺服器的内部架构,即使伺服器技术的变化, FastCGI依然稳定不变。

对比

Figure 1:Request flow for CGI
如图
Startup and Request flow for FastCGI

不足

因为是多进程,所以比CGI多执行绪消耗更多的伺服器记忆体,PHP-CGI解释器每进程消耗7至25兆记忆体,将这个数字乘以50或100就是很大的记忆体数。
Nginx 0.8.46+PHP 5.2.14(FastCGI)伺服器在3万并发连线下,开启的10个Nginx进程消耗150M记忆体(15M10=150M),开启的64个php-cgi进程消耗1280M记忆体(20M64=1280M),加上系统自身消耗的记忆体,总共消耗不到2GB记忆体。如果伺服器记忆体较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总记忆体数才500M。

Copyright@2015-2025 www.aizhengw.cn 癌症网版板所有