脚本语言的运行方式

转载 2007年09月25日 09:13:00

关于Ruby Rails的Web部署的粗浅认识:
Mongrel 和 Webrick 是两个stand alone ruby web server。(is there more?)
可以单独运行,当然也可以和 apache / lightttpd 组合使用。
这两个web server是进程模型,不能共享server memory,所以是shared nothing。

另一种方式是,fastcgi 和 apache / lightttpd 组合使用。
fastcgi is not stand alone,不能独立运行。
这种组合方式也是进程模型,不能共享server memory,所以是shared nothing。

那么,Python的情况呢? Python web server 也是share nothing?
Zope, Plone的安装文档我简单看了一下,好像Web Server也都可以单独运行,也可以和apache / lightttpd 组合使用。
我搜索了一下 python web server,发现了一些 Python Application Server。

不知道,Zope等 Python Web Server 的模型是怎样的?
是不是进程模型?能否共享Server Memory?是否Share Nothing?

-------------------------------------------------------------------------------------------------------------------------------------------------------

 

现在这类脚本语言的运行方式基本上有三种:

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提高静态资源的处理能力。这种方式大家都很熟悉了,不用多说。

 

在JVM上运行的五大脚本语言

遵循软件开发工具,在过去十年中的任何人都知道,长期的“Java”指的是一双的技术:Java编程语言和Java虚拟机(JVM)。Java语言被编译成字节码在JVM上运行。通过这种设计,JAVA提供可移植...
  • wyt4455
  • wyt4455
  • 2013年06月28日 09:17
  • 1479

JAVA运行脚本语言(Scripting)

JDK6增加了对脚本语言的支持(JSR 223),原理上是将脚本语言编译成bytecode,这样脚本语言也能享用Java平台的诸多优势,包括可移植性,安全等,另外,由于现在是编译成bytecode...
  • atco
  • atco
  • 2016年04月13日 16:51
  • 2105

脚本语言(Script language,scripting language,scripting programming language)是为了缩短传统的编写-编译-链接-运行(edit-comp

脚本语言(Script language,scripting language,scripting programming language)是为了缩短传统的编写-编译-链接-运行(edit-comp...

在JVM上运行的五大脚本语言(Top five scripting languages on the JVM)

遵循软件开发工具,在过去十年中的任何人都知道,长期的“Java”指的是一双的技术:Java编程语言和Java虚拟机(JVM)。Java语言被编译成字节码在JVM上运行。通过这种设计,JAVA提供可移植...

脚本语言和JAVA语言运行机制的区别

脚本语言和JAVA语言运行机制的区别脚本语言 脚本语言一般都有相应的脚本引擎来解释执行,需要解释器才能运行。脚本语言有很多种,解释器也有很多种,所以不同的脚本需要不同的解释器,只有脚本与解释器对...
  • YS0813
  • YS0813
  • 2017年03月20日 23:45
  • 564

JAVA中脚本语言的使用

JAVA中脚本语言使用 2016年7月18日 下午 3:22 脚本语言的优势 描述应用中复杂多变的业务逻辑,并在应用运行过程中进行动态修改 为应用提供一种领域特定语言(DSL),...

【脚本语言系列】关于Python网页服务Plone,你需要知道的事

如何使用Plone

lua脚本语言的学习-----------------带参数的lua函数的传递

在使用lua的过程中,或许经常需要由lua来传递参数给c++,这时候就需要学习如何去获取到栈中的lua的参数了。在栈中,使用获取参数的函数入下: lua_isnumber(); lua_ronum...

Lua脚本语言入门及魔兽争霸中的Lua函数调用

Lua 的语法比较简单,学习起来也比较省力,但功能却并不弱。在Lua中,一切都是变量.在这篇文章中,我想向大家介绍如何进行Lua程序设计及魔兽争霸中的Lua函数调用。 AD: ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:脚本语言的运行方式
举报原因:
原因补充:

(最多只允许输入30个字)