如果想了解 FastCGI 的技术原理就要了解何为”短生存期应用程序”,何为”长生存期应用程序”。先从 CGI 技术开刀,以下是 CGI 技术的理论:每次当客户请求一个 CGI 的时候,Web 服务器就请求操作系统生成一个新的 CGI 进程。当 CGI 满足要求后,服务器就杀死这个进程。服务器对客户端的每个请求都要重复这样的过程。而 FastCGI 技术的理论为:FastCGI 程序一旦产生后,他可以持续工作,足够满足客户的请求直到被明确的终止。如果你希望通过协同处理来提高程序的性能,你可以请求 Web 服务器运行多个 FastCGI应用程序的副本。CGI 就是所谓的短生存期应用程序,FastCGI 就是所谓的长生存期应用程序。由于 FastCGI 程序并不需要不断的产生新进程,可以大大降低服务器的压力。并且产生较高的应用效率。
与CGI相比FastCgi具有以下特点:
1.打破传统页面处理技术
传统的页面处理技术,程序必须与 Web 服务器或 Application 服务器处于同一台服务器中。这种历史已经早 N 年被 FastCGI 技术所打破,FastCGI 技术的应用程序可以被安装在服务器群中的任何一台服务器,而通过 TCP/IP 协议与 Web 服务器通讯,这样做既适合开发大型分布式 Web 群,也适合高效数据库控制。
2.明确的请求模式
CGI 技术没有一个明确的角色,在 FastCGI 程序中,程序被赋予明确的角色(响应器角色、认证器角色、过滤器角色)。
3.合理的程序结构
起初,真的很讨厌 FastCGI 应用程序的结构要求。没关系,您经过一段时间编写后就会喜欢这种结构,只有这种完全规范的结构才能让您的程序更有效率。
然后是Fastcgi的优缺点。
Fastcgi的优点:
1、高稳定性、fastcgi是以独立的进程池运行来cgi,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分配新的进程来运行逻辑。
2、良好的安全性、 fastcgi和宿主的server完全独立, fastcgi怎么down也不会把server搞垮。
2、高性能、 fastcgi把动态逻辑的处理从server中分离出来, 大负荷的IO处理还是留给宿主server, 这样宿主server可以一心一意作IO,对于一个普通的动态网页来说, 逻辑处理可能只有一小部分, 大量的图片等静态IO处理完全不需要逻辑程序的参与。
3、良好的扩展性、 fastcgi是一个中立的技术标准, 完全可以支持任何语言写的处理程序。
Fastcgi的缺点:
1、对某些服务器的新版本支持不好,对分布式负载均衡没要求的模块化安装是否是更好的选择。
2、目前的fastcgi和server沟通还不够智能,一个fastcgi进程如果执行时间过长会被当成是死进程杀掉重起,这样在处理长时间任务的时候很麻烦.这样做也使得fastcgi无法允许联机调试。
3、SCGI等类似技术的都可以替换fastcgi, SCGI在python中很成功,功能完备,目前SCGI也开始支持rails了随着rails的流行,一个独立的mod_rails是可能出现的,而且 ruby自身的webserver也开始涌现,以后极有可能自己搞一套东西连接主流的webserver.fastcgi设计的时候是想作common gatewayinterface(cgi)的,但是这个目标的现在看来已经不适合了。
模块化安装的优缺点暂时还没找到。