字体:  

ExtMail 0.24-pre4最新技术 -- FCGI remote server模式简介

ELM 发表于: 2006-12-05 11:16 来源: 榆树社区

hi 各位:

现在给大家介绍一项为extmail开发的最新技术:FCGI remote server模式。该技术将彻底改变
目前常见直读Maildir的webmail工作模式,不再需要为烦琐的权限问题而头疼,同时也为日后支持
负载均衡及分布打下了基础。

什么是FCGI remote server模式?

自早期extmail开发到现在,就陆续有朋友建议extmail支持mod_perl,而我却坚持使用FCGI技术,
根究其原因,是因为mod_perl 不便于将程序与web服务器分离到不同的机器,同时不好实现负载
均衡,但mod_perl也有进程管理容易得多等好处。

通过TCP 或unix socket,FCGI天然地支持fcgi程序与web server分离,这也是FCGI吸引人的地方
目前开发出来的FCGI remote server模式大体上是将extmail通过dispatch.fcgi 作为一个守护
进程运行,监听一个端口(例如8888),而web server则将extmail的请求通过TCP socket
转给dispatch.fcgi,由dispatch.fcgi处理,处理结束后dispatch.fcgi将处理的结果(也就是
我们平常看到的html页面)输出到前端的web server并送到客户端浏览器。见下图:

dispatch.fcgi <===============> web server <============> browser
(fcgi服务器)                 TCP                         TCP

如何才能支持FCGI + remote server模式?

前提有2个:

1)Web server 编译了fastcgi的支持
目前apache及lighttpd等流行的web 服务器都能支持fcgi

2)支持remote 模式的fcgi程序(extmail)
使用extmail 0.24-pre4或更高版本,附带的dispatch.fcgi已经支持这个模式

FCGI remote server模式有何好处?

由上面原理图可以知道,我们能可轻易地将dispatch.fcgi及extmail的软件+存储(maildir)部署
到一个机器上,例如叫storage1 ,而将web服务器安装到另一个机器,例如叫web1,物理上将2个
部分分离。这样作的好处很显然:

1)webmail和webserver分离,各自重启动不影响另一方

2)权限分离,不再需要改User/Group或SuEXEC等技术

3)可支持负载均衡,如部署多个extmail机器则可提高容量

4)可自行开发进程管理器,管理extmail的进程数

目前的dispatch.fcgi 只使用了简单的进程管理机制,启动时按命令行参数预先创建若干个子进程
(prefork)提供服务,用户可以根据机器的最大负荷,调整启动的进程数。而原来的FCGI运行模式
由apache或lighttpd启动fcgi程序,进程管理不够灵活。

如何配置FCGI remote server模式?

请参考extmail 0.24-pre4 的README.fcgi

转自: http://www.extmail.org/forum/archive/3/0606/1872.html