6.2 FastCGI

应用服务器

CGI这种技术可以使Web服务器成为动态的,所谓动态的就是,大家都访问相同的资源,但是得到的结果是不一样的。

因此许多公司将他们的服务,通过这种方式暴露出来,这些服务器不是提供网页服务,而是提供应用信息服务的,这种称之为应用服务器。比如微信的开放平台,就有些服务是通过URL方式暴露出来供客户使用的。

https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1

应用服务器使用CGI每次请求都fork一次,性能太不靠谱,因此有许多新的技术出现,比如fastCGI,是一种避免fork的技术,另外有一些HTTP服务器的专长就是做应用服务,并不擅长做页面处理。在工作环境中,选择什么服务器,跟公司业务,技术人员对技术的熟悉度有关系。

fastCGI

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

  • step1. Web 服务器启动时载入初始化FastCGI执行环境 。 例如IIS ISAPI、apache mod_fastcgi、nginx ngx_http_fastcgi_module、lighttpd mod_fastcgi

  • step2. FastCGI进程管理器自身初始化,启动多个CGI解释器进程并等待来自Web 服务器的连接。启动FastCGI进程时,可以配置以ip和UNIX 域socket两种方式启动。

  • step3. 当客户端请求到达Web 服务器时, Web 服务器将请求采用socket方式转发到 FastCGI主进程,FastCGI主进程选择并连接到一个CGI解释器。Web 服务器将CGI环境变量和标准输入发送到FastCGI子进程。

  • step4. FastCGI子进程完成处理后将标准输出和错误信息从同一socket连接返回Web 服务器。当FastCGI子进程关闭连接时,请求便处理完成。

  • step5. FastCGI子进程接着等待并处理来自Web 服务器的下一个连接。

由于 FastCGI 程序并不需要不断的产生新进程,可以大大降低服务器的压力并且产生较高的应用效率。它的速度效率最少要比CGI 技术提高 5 倍以上。它还支持分布式的部署, 即 FastCGI 程序可以在web 服务器以外的主机上执行。

总结:CGI 就是所谓的短生存期应用程序,FastCGI 就是所谓的长生存期应用程序。FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。

results matching ""

    No results matching ""