欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

动态脚本语言的部署运行方式介绍

程序员文章站 2022-03-08 21:21:34
...
现在这类脚本语言的运行方式基本上有三种:

1、Apache Module方式

由Apache进程用module方式来管理,web请求的静态页面和动态请求都是由apache进程内部直接处理掉了。典型的如mod_php,mod_ruby,mod_perl,mod_python。这种方式目前PHP和Perl比较多的采用。这种方式其实还是非常成熟的,apache对于内存管理已经很好,运行效率各方面都很不错。当然apache进程之间也是SNA。

但是ruby和python一般不建议用这种方式,这是因为PHP和Perl解析器的开销非常小,以Apache Module方式跑很灵活而且不怎么消耗资源;而ruby和python的解析器开销非常大,用这种方式,很浪费资源。例如一个PHP解析器跑起来才消耗2MB内存,一般也就7-8MB。但是ruby解析器跑起来就是30MB内存,消耗多的时候高达200多MB。由于很多apache进程只是在处理静态资源,完全没有必要带着一个庞大的ruby在跑,因此就显得过于浪费了。

2、FastCGI/SCGI

ruby on rails很流行使用FastCGI,Python则流行SCGI,也是SNA,比上面的方案在部署和cluster方面要灵活的多。这种方式下,web server处理静态资源,将动态请求通过Unix Socket/TCP端口发送给后面的ruby/python进程来处理。一般来说,页面带有很多静态资源,因此一次用户的动态请求实际上对应了web server的好几个连接去处理静态资源,和一个后台ruby进程去处理动态资源。因为把静态资源和动态请求分开了,所以不再需要那么多的ruby进程来跑。据说一般经验公式是:apache进程数量如果是70个的话,那么FastCGI方式的ruby进程只需要开10个,7:1的比例。另外每个ruby进程再执行一次之后就会hold住这个数据库连接,以后就会直接使用了,避免了数据库连接的开销,已经类似Java的数据库连接池的作用了。

JavaEye2.0现在开了30个FastCGI的ruby进程,但是据我观察,大部分繁忙的时候,真正被用到的ruby进程也只有十几个而已。

3、ServerVM

Java和Zope都是这种方式,一个单一进程在跑,里面很多线程分别处理不同的动态请求,shared memory方式。有时候也会在前面放一个web server提高静态资源的处理能力。这种方式大家都很熟悉了,不用多说。