当前位置: 首页 > news >正文

mod_fastcgi和mod_fcgid的区别

mod_fcgid是一个跟mod_fastcgi二进制兼容的Apache module。


原来的mod_fastcgi因为实现方式的限制,所以可能会创建了很多不必要的进程,而实际上只需要更少的进程就能处理同样的请求。 mod_fastcgi的另外一个问题是每一个CGI的多个进程都共享同一个管道文件,所有到同一个fastcgi的通讯都通过这个同名的管道文件进行, 这样当出现通讯错误的时候,根本不知道正在通讯的是哪一个fastcgi,于是也没有办法将这个有问题的进程杀死。

mod_fcgid尝试使用共享内存来解决这个问题。共享内存里面有当前每个fastcgi进程的信息(包括进程号,进程使用的管道文件名等),当 每次尝试请求fastcgi工作的时候,Apache将会首先在共享内存里面查询,只有在共享内存里面发现确实没有足够的fastcgi进程了,才会创建 新的进程,这样可以保证当前创建的进程数量刚好能够处理客户的请求。另外,由于每一个fastcgi进程使用不同名称的管道文件,所以可以在通讯失败的时 候知道到底哪个fastcgi进程有问题,而能够尽早的将其剔除。


程序实现的目标

跟mod_fastcgi二进制兼容
只要在Apache中用mod_fcgid替换了mod_fastcgi,就能工作。原来的fastcgi程序不用重新编译,立即可以工作。


更严格的控制进程的创建
Apache中每一个request handler都能通过共享内存知道当前系统fastcgi运行的情况,这样可以防止过度的创建fastcgi进程,无谓的消耗系统的资源。


简单清晰的进程创建速度控制策略

每一个fastcgi都会维护一个计数器,这个计数器在程序创建和程序结束的时候都会增加,而这个计数器每秒会减1,直到0。当计数器的值高于某个 阀值的时候,程序就会停止创建,直到计数器的值回落。这样既可以保证在请求突然增多的时候能够快速反应(特别是Apache刚启动,需要大量创建程序的时 候),也能保证当fastcgi程序有问题,不断重起的时候,重起的速度不会过高而消耗过多的系统资源。


自动检测出有问题的进程

因为每个fastcgi使用自己特定的管道文件,所以在通讯错误的时候可以轻易知道哪一个程序出现问题,而尽早的将其剔除。


可移植性
遵照Apache2的习惯,所有可移植的代码都放到一起,所有不可移植的代码都在arch目录下分开存放。当前已经测试过的系统包括 Linux , FreeBSD(已经包含入FreeBSD4和FreeBSD5的port中), Solaris, Windows 2000.


支持FastCGI方式运行的PHP

可以直接支持以FastCGI方式运行的PHP。因为PHP现在还不能保证所有的扩展代码都是线程安全的,所以并不建议在Apache2的线程模式 下使用mod_php。而以FastCGI方式运行的PHP则是其中一个解决办法。另外,使用mod_fcgi还可以在不修改任何PHP代码的情况下,获 得数据库连接池的功能,大大减少PHP进程到数据库的连接。


目前三个fcgi版本及其简单介绍: 

以下内容摘自:http://www.javatang.com/archives/2010/01/07/3629356.html

目前我们在网上能够找到的FastCGI有三个版本:
(1) mod_fastcgi:官方地址是
http://www.fastcgi.com/。这个可以说是最初始的FastCGI的版本,可惜的是现在作者已经好久没有维护了,现存编译好的版本非常少,其官方网站更多的是以一个“标准”的姿态出现的。现在给出通过官方网站没法直接找到的两个地址,一个是下载地址http://www.fastcgi.com/dist/,另外一个是相关的配置参数的文档http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html。虽然是官方标准,但是不建议在生产环境中直接使用,因为它特别的不稳定,而且兼容性极差。


(2) mod_fcgid v2.2:官方地址是http://fastcgi.coremail.cn/,不过网站现在打不开了,所幸的是可以在http://www.apachelounge.com/download/网站上下载。fcgid是在fastcgi的基础上进行了扩展和优化,并且针对Apache的新版本做了及时的更新,使得可以在生产环境下使用,二者具体的区别可以阅读下面的参考资料。原来在coremail上所提供的文件因为现在网站没法访问,所以具体的关于ApacheLounge上所提供的mod_fcgid2.2和coremail上所提供的有什么区别我不是很了解。所幸我找到了作者的邮箱,通过跟作者邮件沟通了解到,原来作者在做完第一个版本的fcgid之后就将源代码发布到了网上,后来ApacheLounge的Steffen使用源代码重新在Windows下面编译后发布了可以直接使用的二进制版本的mod_fcgid.so文件。同时,Steffen也是Apache Windows版本的一个维护者。经过试用,我感觉这个版本的mod_fcgid是最适合在Windows环境下使用的。


(3) mod_fcgid v2.3.x +:官方地址为http://httpd.apache.org/mod_fcgid/,相关文档地址为:http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html。这个是目前Apache官方所提供的mod_fcgid,目前最新版本为2.3.4。通过作者了解到,这个是作者将原来放在coremail上的mod_fcgid代码捐献给Apache之后由Apache官方来维护的一个版本,可以说是2.2版本之后的后续版本。但是我在Windows上面使用之后感觉不是很稳定,Apache总是隔一段时间就自动关闭,不知道是我设置的问题还是其他问题。


相关文章:

  • [摘录]第六章 用负激励促进新陈代谢
  • 4. 路由到控制器 - Laravel从零开始教程
  • 给MVC来一个谬论
  • linux 查看 cpu 和内存的命令 - top
  • JDK 环境搭建
  • Windows下编译使用Aliyun OSS PHP SDK
  • KNN算法与Kd树
  • 2D空间中求一点是否在多边形内
  • ceph基础操作记录
  • zabbix企业应用之定时获取监控数据做报表
  • SQLSERVER之“sqlserver索引、视图、存储过程和触发器的使用”
  • 编译动态库与静态库的注意事项和方法
  • 《写给大忙人的hadoop2》读书笔记(一)大数据定义
  • Flume OG 与 Flume NG 的对比
  • Android:LinearLayout布局中Layout_weight的深刻理解
  • 【译】理解JavaScript:new 关键字
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Brief introduction of how to 'Call, Apply and Bind'
  • Create React App 使用
  • ECMAScript入门(七)--Module语法
  • gops —— Go 程序诊断分析工具
  • HTML中设置input等文本框为不可操作
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • JSONP原理
  • Linux中的硬链接与软链接
  • Lsb图片隐写
  • mysql外键的使用
  • PHP的Ev教程三(Periodic watcher)
  • php的插入排序,通过双层for循环
  • PHP那些事儿
  • Rancher-k8s加速安装文档
  • Vue全家桶实现一个Web App
  • windows-nginx-https-本地配置
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 关于 Cirru Editor 存储格式
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 前端性能优化--懒加载和预加载
  • 数据科学 第 3 章 11 字符串处理
  • 问题之ssh中Host key verification failed的解决
  • 线上 python http server profile 实践
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (42)STM32——LCD显示屏实验笔记
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (三)uboot源码分析
  • (十六)Flask之蓝图