`

范凯谈Ruby on Rails项目实践

 
阅读更多

Summary 在本次采访中,JavaEye站长范凯结合自己的实际开发经验,分享了在使用Ruby on Rails的过程中所应注意的事项,比如选择RoR的原因、用RoR开发的优势、网站的配置和部署、所遇到的困难和解决方法以及对当前动态语言发展的看法等。 Bio 范凯,JavaEye技术网站创始人,资深软件工程师,多年从事专业的软件技术咨询、培训、软件架构设计和软件开发解决方案,具有丰富的应用软件设计和开发的经验。对于软件行业的发展趋势具有前瞻性的眼光,领导JavaEye网站率先在国内推广Hibernate、Spring开源框架、AJAX技术、敏捷软件开发方法和Ruby on Rails等。 感谢上海卡内基信息科技有限公司提供场地支持! 那请向大家简单介绍一下自己好吗?好的。我是在2003年创办了一个Java技术网站叫JavaEye。到今天的话,应该算在国内一个比较有名气的以Java为主的,宣扬开源技术的这样一个比较高尚的一个技术交流社区。那目前为止,我们其实也成立公司来专门运营JavaEye这样一个社区网站,我们以后的目标吗,当然希望能够让它成为国内的一个很好的技术社区,因此我们能够在国内推广更好的技术,同时呢,我们也希望我们这个网站以招聘,就是通过招聘方式进入这样一个商业模式。 JavaEye网站它背后是用什么样的一个开发平台呢?我们JavaEye网站的话,开发的话就是用Ruby on Rails,应该说完全都是用Ruby on Rails来开发的。 为什么要选择用Ruby on Rails来做JavaEye呢?其实我们在开发JavaEye之前,在从2003年一直到2006年,这三年时间,我们其实用的是一个PHP的开源的一个论坛叫PHPBB来开发的,就是来运行我们整个JavaEye网站,那么到后来我们由于整个网站的发展嘛,需要扩充更多的功能,在这种情况下,我们需要开发。开发的话,那就要考虑继续用 PHP,还是用Java,或者说是用其它的,因为当时在我们做开发之前,我自己其实是有一个比较长的一个技术选型过程,我大概在2005年,就在筹划开发了,但是由于各个方面的条件吧,团队呀,还有诸如此类的原因啊,那么实际上一直到2006年8月份才开始开发。 但是在这个过程当中,我其实最早考虑是用Java开发,因为PHP的话,我之前,在00年、01年的时候,也做过大概有将近两年的开发,那PHP 的话,就是当整个网站规模很大,也就你的那个网站代码量很大的时候,那管理起来相当困难。而且PHPBB的话,就是PHP的话,它本身它的这个面向对象的机制、运行效率也不是特别高,那么所以后来我,后来的时候,我一直考虑用Java去做,像我学习Java的话也是从2000年,差不多从2000年开始做得,一直到06年,也做了很多年。那么我在06年就开发,06年准备在开发JavaEye新的版本网站的时候,考虑到如果用Java开发的话,它的整个开发成本会很高,当初我预计的话,如果用Java运作的话,可能大概要,乐观的估计的话,可能要三个月到五个月才能开发完,所以当时感觉到开发量很大。这也是之所以迟迟没有开发的原因。 那么大概在06年的三四月份,那个时候Ruby on Rails在国内已经起来了,在起来以后那个时候我已经在开始在用Ruby on Rails了,那么看了一段时间以后,我自己的评估呢,它是能够比Java的开发效率高很多,当时的一个传言说就是快十倍了,然后当时那我想就用Ruby on Rails做好了,那后来我们实际上只用了一个多月就开发出来了,确实应该说效率不错。 在效率上边的优势是非常明显的,那我想问问,就是你们开发这个JavaEye的话,是怎么样一个开发过程呢?开发过程,我们应该说蛮简单的,就是三个开发团队三个成员,我自己主要负责产品设计,还有另外一个成员是负责UI的设计,还有第三个人是主要写代码的,当然其实我们三个都写代码,但是就是负责写程序的那个人吧,它做的代码量是最大的,整个开发过程的话,我想当时我们应该说还是,也不是经常在一起办公,还是相当于互联网的形式,那么经常每天通过Skype,然后在线的进行交流,然后就是我们的CVS系统,放在互联网的服务器上,基本上这样就可以了。 我问一下就是用Ruby来开发这个JavaEye,你觉得你们的优势何在呢?用Ruby开发JavaEye的话,我想主要两个方面吧。一个是它的开发的效率很高,就是整个周期比较短吧,像我们一个多月就做好了。那么如果用Java 的话,我估计至少要,可能要三到五个月,所以一个是开发速度很快;第二个呢,对于互联网网站来说呢,就是用Ruby on Rails它网站后期的维护成本也比较小,也应该说要小很多。我随便说一下,比如说我们如果用Java做一个网站,互联网网站,你可能经常要不断发布新的版本吧,比如说今天出了一个Bug,你马上要改,还比如说今天你有一个小的功能,你要调整,就是差不多的情况,我们平均下来的话,一两天就会重新把代码进行更新,就是代码肯定要有更新,有新的版本会发布上去。 如果用Java的话,它就面临着整个应用系统重启的时候啊,它中间至少要中断,比如说要三四秒或一分钟这样的一个中断过程,这个其实对于互联网网站是很难忍受的,所以你要像Ruby on Rails那样,反正你重新发布一下,重启一下,一两秒整个网站就可以完全更新了。 好,那么JavaEye网站背后是怎么样一个配置呢? 整个Java网站,它基本上是用Ruby on Rails比较推荐的一个配置,就是我们前台的Web服务器是用Lighttpd,实际上它是一个轻量的Web Server,现在也很流行,那后台的话,就用的是FastCGi靠Ruby进行,数据库就是用MySQL,操作系统就是Linux,应该说是Ruby on Rails的一个流行的配置,也可以说是久经考验吧,现在跑下来运行了有一年左右的时间,应该说还是很满意的,很稳定的。 那就是这样的一个配置的话,如果随着JavaEye的访问量的越来越高,在并行性这块能不能经受一些考验呢?或者说在今后比较随着流量增大,会不会有这样的一个瓶颈吗? 我现在可以给你简单介绍一下,我们那边网站的访问数据啊。现在我们网站数据的话,经过我这边统计,每天我们整个网站服务器处理的动态请求的数量,每天大概是在50万到80万之间波动,当然PageView没有那么高,因为有很多它是搜索引擎爬的,Pageview大概也就是五十万吧,但是其实每天动态请求数还是蛮多的,50万到80万。那么我们现在其实是一台服务器来跑Web,就是跑Ruby,然后还有一台呢就是专门提供服务跑MySQL。 然后我们现在Web服务器跟数据服务器其实CPU都还空闲的,就是其实都是很低廉的硬件了,两台都是两路AMD的PC Sever,两台机器加起来,我当时总共购买价值才两万八。两台机器总共花了两万八千块钱购买过来,我们现在两台机器可以每天支撑50万到80万的动态系统,而CPU的空闲率差不多50%到60%,所以从我目前这种情况来估计啊,我们的网站就是现在这种程序情况来看,每天可以支撑100万以上的动态请求是没有问题的。所以我想从我们目前这么廉价,你像总共价格不到三万块钱的硬件,那你跑Ruby on Rails,每天Pageviev可以支撑到100万。我觉得应该说已经是,不能说特别优秀吧,起码就是说可以达到你要求,在性能上不会让你觉得无法接受。 那么你对Rails环境部署这方面有没有什么建议吗? 从Rails环境部署呢,其实实际上有很多初学者,它也遇到很多问题,然后很多环境它基本上都没有,很多环境它自己都无法搭建起来。我想这其实有一个历史原因,Ruby呀和Ruby on Rails啊,它其实基本上都缘自于Unix文化,包括Ruby的开发者Matz,还有包括Rails的开发者DHH,开始它们基本上都是用Unix,然后用Mac,Linux操作系统,就是整个的Ruby社区和Rails社区相当歧视Windows开发平台。那么这样就造成了一个结果,就是你在用整个 Unix平台的部署方案会非常丰富很多,但在Windows平台上几乎没有什么人关注它,那么落到我们本身中国现在这样一个Web开发的一个实际环境啊,大多数开发者都还在Windows平台上做开发呢,所以它这个整个Unix环境的不熟悉,在这种情况下,它遇到很多问题,比如说,我在Windows做好开发了,我对Unix环境我又不熟悉,要在Unix环境下我要做部署,它不可避免的会遇到很多问题。 那我想其实是这样的啊,先从我们自身网站上来说,我自己应该还算一个比较资深的在Unix方面的网管吧,应该也做了很多年,所以像我自己部署JavaEye的整个平台呢,我还是从性能方面考虑,还有从灵活性方面考虑。所有相关的,整个包括Ruby在内,那包括Ruby上所有的一些的库,还包括一些所有的插件基本上全都是我自己手工安装,我自己手工配置的,那我要达到的一个最大的可定制性,以及最高的性能。但是我想,我这种部署方式也不是说放之四海而皆准的,一般来说呢,现在也有一些包括一些Package,比如说像Thoughtworks公司,它们发布的像Rubyworks这样一个 Package。我们也基本上是按照它的指导,按照它的整个的概念的说明,一步一步可以完成,经过一个性能相当不错的环境把它搭建起来,我想这也是一个方案。 那在那个开发JavaEye网站的过程中,就是使用Ruby语言会碰到一些什么问题吗?那如果有的话,你是怎么去克服的呢? 我觉得我们遇到的一些问题,大概在这样几个方面吧,第一个呢就是团队配合的问题,那这个问题其实一直到现在我们都存在,什么问题呢?就是像那个Ruby本身是一种很灵活的动态语言,而且它本身它强调的是怎么说呢,就是有各种各样的不同的这种风格,那么在你一个团队,大家都在开发同一个项目的时候,那不同的人呢,根据它自己的不同的思路,它写出来那个代码呀,风格会很不一样,就是这种代码的风格差异会非常大,就不像Java。那Java的话,你只要遵循一个共同的标准,其实你写出来的代码应该是大同小异的,不会有特别大的风格上的差异的。但是对于Ruby来说,这个就很不一样了,因为它做同一种方式的时候,就有很多很多种办法。 那我随便举个例子,比如说,你要想把一个方法注入到你当前的类里面,你就有很多办法,你可以用Module,或者你可以用Class,你可动态地加载进来。Ruby有很多很多种方法,那么你这不同的人,你在处理同一个问题的时候,你写这段代码,你采用什么方式,那么每一个人它都会采用自己的方式,从代码风格上比较难统一。那带来一个问题就是,你写的代码,其实我大概也能看得懂,但是呢你为什么要这么做,我可能我也不是特别理解,我不太会理解你为什么要,这个代码你为什么要那么去写,它可能就是需要经常的面对面的沟通,我才能够明白,我想这是第一个问题,就是本身由Ruby语言带来的这样一个,在团队协作上,带来比较大的一个问题。 那我们面临第二个问题,我想主要还是跟我刚才说的还有关联,我们主要的开发平台还是在Windows上开发的,毕竟你要在Windows下,在IE浏览器上还要测试,还包括考虑到就是我们通过我们后台监测系统呀,通过Google Analytics监测的话,我们整个网站的访问者98%是使用Windows的,那么,那这种情况下的话,比如说你调用CSS了,你使用什么样的字体,对吧?所以这些考虑就必须使的在Windows下开发的,才能够保证你开发出来的网站浏览者看的时候应该基本是一致的。那么你在Windows下做开发,然后你在,我们是在SUSE Linux上去做部署,那么在这里,其实中间会有一些差异,包括有一些依赖于本地化库的,一些第三方的类库,比如说Magic,它就是可能会在 Windows下,在Linux下,它有不同的表现,还包括也就是说你的文件存储路径啦,诸如此类的,整个操作系统之间的差异,会给你带来一些困扰。那我想这是两个问题,这个问题只要你有足够的经验还是能够克服的。 要说第三个问题,我觉得就是Ruby,它其实有很多第三方的插件,但是插件呢质量参差不齐,而且没有一个特别统一的管理。那我们说Ruby它其实有一个网站叫Rubyforge,它可以把一些第三方的类库都放在上面。你要搜索什么也好,安装什么也好,其实你都可以到统一的到这样一个代码集散地,你去获取,但是像Rails第三方插件,它不是这样的,目前没有一个。怎么说呢,没有一个这种就是专门有一个网站来搜集和索引所有第三方插件,插件就是散落在各个的作者自己的博客的地方或者,反正就散落在各个角落里面,所以你要去找插件的话,那你要搜的话,其实你也要自己去慢慢搜,而且搜出来的话,它没有一个官方的评价,你也不知道它好还是不好,然后自己去用。 用的话呢,从我们现在来看,大部分插件拿过来用,我们或多或少都会有一些自己修改,总会有一些Bug的,那么这个Bug的问题,其实更多的也跟就是我们中文的这种Rails的开源的Contributor不够有关,所以很多一些西欧的或者是美国的Contributor它本身,它背景呢就是那种 Contributor背景国家嘛,所以它做开发的时候未必会考虑到我这种中文的这种多字节处理应该是个什么样子的。像这种情况中文的在Ruby社区, Rails社区Contributor不够吗,所以我们经常会碰到这样一种问题,但是你也没办法得自己来改。 Ruby语言这块有没有什么一些优势呢? Ruby语言,我这么说吧,就是Java现在从Java的版本5.0开始,5.0,6.0和7.0,它应该说有一个很明显的趋势就是越来越动态化了。这个动态化呢,它是从某种程度上来说,你可以看成是,它越来越像Ruby跟Python这样的动态语言的学习,包括像Java 7里面正在讨论,现在准备加入Closure,就是那种闭包,就是其实是Ruby语言用得非常非常多一种很常见的这样的一种语法结构。那我想,从这样一个角度,你可以很简单的看出来,其实Ruby它本身,目前的一些语法上的一些优势呢,是一些主流的语言包括Java,包括C#,正在学习,不断吸收的。 嗯,比如说?我觉得体现在这样几个方面吧,第一个呢它就是有一些高级语法结构,这种语法结构呢是Java跟C#现在不具备,比如说像它的Closure,还比如说像它的一些其它的机制,动态的机制,像这些机制目前Java和C#这种静态语言它不具备。不具备的话,那就必须用一些比较麻烦的手段去实现,像Java的 AOP啊,Java AOP应该说在Ruby里就没有存在的必要性了,它本身语言是开放的,这语言开放什么意思呢?就是说我们说一个加号吗,一个加号就是一个,加号比如说在数字里面,就是数字相加,是一个加法运算,在字符串里是字符串拼接运算,那像这种加法的符号在Java里,它本身就是语法的一个固定的部分对吧?那在 Ruby语言里,它这个加号它其实就是一个方法,是方法你可以重新定义它,你可以把这种,你把它改成你自己想要的任何的一种形式。那它带来的一个结果就是,你可以把Ruby改成你愿意,你想要的这样,比如说像Java的AOP,动态的我觉得这个不需要的,我只要在method里我只要动态的把它的方法定义改变一下就行了。 刚才谈到Ruby语言的灵活性,然后其中有一个非常热门的话题,就是Ruby对DSL的支持,那请谈一谈就是你对这方面的一个看法。 好的,像Rails框架本身它就是Ruby的一种DSL,这个DSL它怎么解释呢?我的理解是这样的啊,就是本身,你在你自己特定领域里,你定义一套简单的语法,能够很轻松很方便而且很强大的,来实现你自己需要的业务逻辑。这个比如说像我们在企业运用当中的工作流,工作流你用什么样的方式去描述工作流,还有比如说一个简单的像网络游戏里面,你什么样的定义,比如说这个地图啊,你打怪的规则是怎么样的,这些其实都是DSL。那我觉得传统中我们做企业开发的 DSL有很多,比如说在工作流里面你用OSWorkflow,它有专门的那个XML这样的一个解析的文件,甚至包括都有工作标准,比如说什么EL,诸如一些其它的标准。 但是呢我觉得这些所有的用来描述这种专用的,用来描述特定领域的,这样的所谓的DSL领域呢,我感觉基本上分成两类,一类就是现在Java和主流企业运用,它比较倾向的一种方式,就是我用XML语言来描述,那包括像现在的在SOA里面描述一个业务,其实都这样用的,但是呢,就是这种描述语言呢,它基于一个基础,就是说不是程序运用这种描述语言,这是用某种工具可视化的工作。但另外一种流派呢,就是另外一种方向,就是用脚本语言运用非常灵活的,描述能力很强,非常切近与这种英文的,怎么说呢,英文的这种自然语法的,就是脚本语言去描述。像这个呢,其实就是Ruby。 应该说这两种方向在Ruby做描述DSL这个领域相当的,我觉得是相当有前途的,包括Rails,其实就是Ruby DSL的它的一个应用,还比如说,这个构建工具Rake,就相当于一个Java里ANT这样的一个工具,它也是这样的,这个包括Rails包括Rake,还包括就是我看过的在日本它有一些游戏,它用的一种脚本叫RGSS,就是描述我这个在游戏里地图怎么绘制,然后东西怎么移动,规则是什么样的。就是所有的这些东西,它都是类似于一种英文的语法的方式去描述的,就是我应该做什么什么,还包括现在,我们现在那个在这个JavaEye 3.0开发里边,用的一种描述需求的方式,用RSPEC,这个RSPEC呢就是说什么呢?所谓SPEC呢,就是需求、需求规则嘛,就是你用Ruby语言来描述,我要实现一个什么样的功能,它应该具备什么什么,像这些东西,其实本身就是可以运行的Ruby代码,所以我觉得用Ruby做DSL,应该说是方兴未艾吧。 随着近来动态语言在应用开发这个舞台上边越来越活跃,然后像Ruby、JRuby、XRuby和Jython这些动态语言在JVM平台下边的实现,也成为技术圈子里边的一个热门讨论的话题。另外一个很有名,就是很著名的一个例子是微软在.NET平台下边的这个CLR基础上构建出了一个DLR(动态语言运行时),这个也表明了就是微软对于动态语言的一个重视,那对于就是这些VM虚拟机作为动态语言的运行平台,你是怎么去看的呢? 我是这样看的,首先我对微软的.NET平台不是特别的熟啊,那我还是想讲一下我对JVM平台,对Java这个平台的看法。Sun公司呢其实它本身从,应该说它从整个Java开源以后啊,它对在Java运行平台上也应该说投入非常非常大的精力,那我想体现在这样几个方面呢,一个是它努力的准备在Java,在 JVM里边加一些动态指令,这种动态指令呢,它可以很大的提高脚本语言,这种动态语言在JVM上它运行的效率,那还包括像Sun的话,现在Java平台上呢来运行Ruby,它投入非常大的精力,它专门有一开发团队,包括它把JRuby整个团队雇佣过去,专职做JRuby的开发,包括我们看到从JRuby团队进入Sun公司以后啊,整个JRuby它的那个开发的速度以及发展方向啊,这开发速度非常快,而且它的那个开发方向应该说很清晰的,效果非常显著。 第二个呢,就是现在Sun呢,在它自己的整个开发工具NetBeans上,也专门的有这种开发人员,就是在NetBeans开发针对 Ruby和Ruby on Rails这样的一个开发环境,那么像现在在那个NetBeans上你要如果说,Ruby on Rails应用的话,已经非常强大,差不多相当于我们平常在Java上运行Eclipse,很多功能都有,包括类型的推断,自动的补齐了,很多很多,基本上都齐全。那么我想Sun公司它其实,我也看过一些访谈啊,基本上Sun的一种看法它还在JVM上还可以是很开放的态度,就希望JVM成为一个平台,一个通用的。怎么说呢,一个通用的运行应用程序代码的一个平台,不管Java也好,还是Ruby也好,还是Python也好,在这里顺便说一下,让Java平台的那个Python语言,原来2.1已经停止好几年了,但是最近它整个开发突然又活跃起来了,最近2.2版本发布了。结果我想我对在Java平台上的这种动态语言的发展还是,应该说还是非常乐观的,在JVM平台上,这几种动态语言从目前来看的话,我觉得JRuby的前景是最看好的,主要原因本身Ruby 社区发展的蓬勃,然后再加上Sun在JRuby上面投入的资源非常多,还有些其它的,像Groovy啊,还有Python啊,我觉得相对来说没有Ruby 发展的好。 那对于Ruby目前就是存在这个语言好多的一些实现,比如说像标准的CRuby的实现,然后还有像那个,然后在.NET平台上面两个,一个是MRuby,刚刚发布的,另外呢还有就是Ruby.net编译器,然后在Java下边呢,又有一个是JRuby和XRuby这样两个项目,你怎么样看待Ruby语言实现百花齐放的这样的一个情况呢? 在我自己看来呢,实际上从我目前的Ruby on Rails社区来说,我可能还是最关注CRuby它自身的发展,应该说现在从JVM平台上支持的这么多Ruby解析器,还包括在微软.NET平台上它也有解析器,我觉得从这种情况来看的话,应该说这是一种自发出现的。我为什么说,它是自发出现呢,比如说啊,在Java平台上,它现在有一些JRuby, XRuby,我看看就是开发JRuby的这些人,它为什么要做JRUBY,是因为他本身,他是这个Java开发者,他又很喜欢Ruby,他希望能够在 Java这个平台上来写Ruby代码,所以他就用。包括XRuby,XRuby基本上是由几个中国人来领导的,那么我,他们也希望,就说现在在Java平台上有这么多丰富的内库,那能不能我们用Ruby那种轻巧的语言,还要它这种强大的这种动态语言的特性,但是同时又能利用Java平台这么丰富的内库。好,那我现在就在Java平台上做一个XRuby,一个编译器,然后把Ruby代码编译成Java Class。 所以我们通过,我简单说JRuby和XRuby这样两个项目来看,其实它代表一种趋势,什么趋势呢?就是Java开发者,他逐渐的呢,他对Ruby感兴趣了,包括像微软.NET平台它也是一样的,他也一定是在微软平台上很多微软程序员,他会觉得Ruby这种东西是种很优秀的语言,对他的工作也好,对他的工作有很大的帮助,所以他希望能够我在微软平台上来使用Ruby,所以纵观这种情况,我觉得应该是一个很好的现象,当然从这种这么多的解析器、虚拟机来看,目前来说,还没有什么分裂,至少我没看到有什么分裂的现象。应该说,我应该所有的这些虚拟机呀解析器啊,还都是像CRuby标准这种规格相兼容。 随着主流的这些虚拟机平台对动态语言越来越多的重视,今后就是说会不会出现这样一种情况呢:在某一个虚拟机平台上边实现这种多种语言的互操作,这个好像跟微软最开始的时候,就是多种语言之间互相调用这个初衷是很相似的,你怎么看待这个观点呢? 我是这么想的啊,那个首先就是你会在,如果一个同一个项目当中,混合运用很多种语言,我觉得不太可能。那包括像微软.NET也是的,它其实早期支持很多吗,比如C#,然后还有VB,然后还有很多,包括Python还有C。但即使你现在看,在一个项目里面,不会说我几个项目成员一个用C#,一个用VB写,这不可能的,那你整个项目你就没办法统一起来了。所以其实我想呢,首先不会说,同一个项目用好几个语言,大家混着写,这种情况不会出现。我认为反到更可能的呢是这样一种方式,是什么样方式呢?就是整个项目还是用平台的原生语言去做,包括你看像现在,像.NET项目,大多数情况下大家还是C#去写的,包括 Java平台也是,即便JRuby它发展的多么成熟。 那我认为也只可能出现两种情况,一种情况就是,程序员就觉得我的项目纯粹就用Ruby写,只是把它放在Java平台上跑,那这是一种可能性,但这种可能性,它其实不是一种深层次的应用,只不过就是只说我运行平台从操作系统层面更直接,或者说CRuby转到这个JRuby而已。那更多的一种融合,它其实体现在不同的语言上,它各取所需,就是采用自己更适合的方式,我们说,打个比方吧,就是在Java平台上,以后也许啊,做一个企业应用项目还是以 Java为主,就是你主要还是用Java去做的,还是用Java的组件,但是某一些,其中的某一些部分,也可能比较适合用Ruby去做,像这种情况呢,我觉得最可能出现。 比如说,我们做一个电子政务里边一个系统,或者说做一个银行的KS系统,那比如说我们做电子政务,它涉及到工作流了,涉及到工作流的话,我们现在在Java里面,我们都是用XML来描述这个工作流,这个文件很难维护的,没有特殊的工具来维护,但也许以后我们会有一种比较好的Ruby库,很方便的,我甚至可以让我们的业务人员一条一条的把他的工作流给它写下来,而Ruby的规则呀,它本身就有可运行的,工作流并不明显,这个就很有意义。它比如像一些医院的排班系统,它有很多很复杂的规则在里面,就是规则引擎,规则引擎的话像现在,你要是说如果纯粹用Java去写,那不可能了,那太复杂了,所以现在那个JBoss有个Drools的,也是一个叫JBoss Rules,它也是一个规则引擎,不过它的语法也是自己的定义的,它其实也是相当于一个很小的桌面应用,那我们以后也可以想象一下,我们如果用Ruby DSL,我们写规则也许是跟需求人员一起写,一条一条写,本身这个就是可以运行的,所以在对企业应用这个角度来说,我到是觉得Ruby DSL会是特别有前途的一个方法。 那么我想问另外一个问题就是,Ruby是否已经开始可以支持企业级的开发了呢?支持企业级开发我觉得呢,就是从Ruby语言本身,它的那个语法的特性,还有比如说它的虚拟机本身,这方面来说,我到觉得没有什么问题,包括Rails框架如果做企业级的这种Web项目,我觉得问题也不是很大。当然现在有很多人说,。如果我用Ruby做企业应用的话,它缺少消息系统,它缺少一些调度,还包括一些其它的。比如说跟中间件去打交道的话,就是我觉得呢,其实呢怎么看,就是传统上我们用Java做企业应用项目啊,就是所有的这些企业的功能它都是在 JVM里面来完成的,我一定要用Java开发一个JMS也是做消息系统,一定要自己用一个比如说Java的Course,我自己做这种任务的调度。 还比如说,我如果是调度的话,我也是用其它的方法。其实它的做法就是,我隔离跟操作系统之间的关系,抹平操作系统的差异,所有的功能都是在Java虚拟机上来完成的,但Ruby现在这种情况来说呢,就是如果你考虑到操作系统了,很多东西可以在操作系统级别很简单地来完成。现在比如说,如果你如果要用Linux操作系统,本身操作系统自己就,Linux自己就相信,而Ruby它本身因为现在有CRuby,它跟操作之间的这种互调用比 Java来说要简单很多,要方便很多。所以只要把操作系统这个层面来考虑进来,还包括Java调度,你可以直接用操作系统这种任务调度机制,所以其实我觉得,在企业应用方面,如果考虑到操作系统,把它整合进来这个应该不是个问题。 那Ruby 语言在性能方面呢,比如说现在有一些人对Ruby在性能这方面的一些抨击还是颇为猛烈的,还有另外比如说像是Ruby在Java的JVM平台上的实现—— JRuby,它目前性能上边还不太容大家乐观,那对于这个性能这方面,你们觉得是不是说对它在企业化的这个方向有一定的阻碍呢? 性能方面,至少我目前观察,我觉得没有什么,这种置疑声现在应该说也越来越小了。我们说Java做企业应用,你敢说就一定没有性能问题吗?那你也会碰到性能问题,那否则为什么你会做Cluster呢,然后你会经常去碰到什么内存溢出啊,还有需要我调整一些参数,什么调整PC的算法啊。所以这种问题,它也会遇到很多的,那么比较Java跟Ruby的话,它在性能方面体现在,由于它们的体系结构是不一样的,所以体现出来的性能方面遇到的问题,也是不一样的。那像Java的话呢,它其实就是一个进程,一个JVM进程,里面它自己有很多线程自己在调度,然后它用一个整块的JVM自己进程来占用的内存。它自己做JC 的调度,所以像在Java平台上你往往遇到的一些什么问题呢?比如说你做线程程序,它线程自己专用对吧?还比如说,你这个JVM内存溢出了,还比如说现在 Java现在还面临一个新的挑战,是什么样的挑战呢?就是现在64位操作系统呢,跟64位机器应用以后啊,在那个大内存方面,现在在64位系统上内存至少 4G,8G,16G,像我们JavaEye Web服务器。至少我们现在JavaEye,我们Web服务器跑的也是64位CPU,64位操作系统,那我们现在用的是8G内存,那么当这种大内存的情况下,你这边去跑,它面临着一个什么问题呢?内存太大了以后啊,它做JC的周期会非常长的。 所以现在很多Java厂商它在强调,在用大内存支持上,不要把那个JVM的内存开的太大,开两个G就行了,然后在同一台机器上你要跑好几个JVM,然后那个做Cluster。所以你要其实说进程问题,其实Java现在也面临这个问题,那我们反过再来看Ruby,Ruby它每个进程,它自己的,怎么说呢,因为是解析器,它性能比较低,而JC也很严谨,但是它的做法就是说我一个Ruby解析器不够,我跑多个可以吧,一个不够我跑10个,10 个不够,我跑20个,20个不够,我跑100个,那所以Ruby现在这种情况,跑多个进程,每个进程它其实是单线程,但是这种方式的话,它相对Java来说有个好处,就是说当我需要在Cluster上扩展的话,它是属于一种无状态的架构,从这种横向扩展比较好做。 我想问这样一个问题,就是你对Ruby语言在今后市场前景方面是怎么样一个态度?另外对于Ruby语言本身,它还要再进行那方面的一些改进呢? 有一个就是专门对编程语言流行度的这样的一个调查网站,叫Trobe,T-R-O-B-E,然后.com这个网站。这个网站的话,它从Ruby的话,它现在已经上升到第九,就是它在所有的这个编成语言里面,在目前全球受欢迎程度排在第九位的,应该说已经影响很高了,排在前十名,应该说算是相当相当主流的语言了,所以Ruby前景本身是很看好的。那么就是Ruby呢它现在目前来说,它还是主要用在Web领域嘛,那我觉得它还是一分为二的看,一个是在互联网领域,应该说非常看好,因为现在特别是我听说硅谷的很多创业公司,互联网的创业公司基本上都是清一色的采用Ruby on Rails来做自己网站。在国内现在也越来越多的互联网站用Ruby on Rails,所以这方面肯定非常非常看好。 然后呢,第二个方面在企业应用。因为Ruby它这种编码的风格是在这种大规模团队开发上还是遇到一些问题,就是你怎么样未来用一些更好的软件方法来指导它,这个目前好像没有这种更适合Ruby的软件方法学出来。所以我想在企业应用开发这一块,目前来说不会成为一个主流,至少五年之内,我想不会成为主流吧。但是呢,就是Ruby的DSL,就是成为企业应用的里面的一些粘合剂,这个我到非常非常看好,我想这个就是基本上,从市场前景上来分析。 然后另外呢,我觉得从国内的情况来说的话,有一个趋势特别值得注意,这个也是我们Java网站本身也是做招聘,就是帮企业来寻找人才,有一个趋势特别值得关注,是什么样的趋势呢?就是有越来越多的欧美的外包,它们要求国内用Ruby on Rails开发,它在国内寻找就是Ruby on Rails这方面的公司和团队。那么你要说Ruby语言本身,它自己自身需要哪些方面的改进呢,我觉得这个问题相对来说还比较……,我也不是特别在行啊,我只能说就基于我自己很浅显的一些看法。Ruby其实现在目前来说呢,还是有一些在语法上,稍微有一些小的缺陷,比如说在Ruby的那个Block的内部变量,其实相当于,如果跟那个Block外部的那个全局变量重名的话,它其实是没有办法隔离的。所以这个现在就,我们写Ruby程序它就是,就有这样一个准备,Block变量的名字,你不要跟外面的变量重名,所以像这个这方面是有一些语法上一些小的缺陷,那诸如此类,还有很多很多这种小的语法缺陷,那么我想这些语法缺陷还有待于以后的弥补。那这个的话,像我知道的啊,在Ruby下一个版本当中,这个Ruby的作者Matz它在里面也添加了很多很多新的尝试,让Ruby的语言更加动态,更加灵活。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics