JRuby 最近有些厌烦 jruby 了

fsword · 2012年03月08日 · 最后由 debugger 回复于 2013年08月13日 · 14385 次阅读

一直用 jruby 处理 java 这样的遗留系统,一个系统就能搞定。但是最近在部署的时候遇到了一些麻烦,感觉纯粹 ruby 就能搞定的事情,加上个 java 就会变得很复杂,这个情况有些像基于 hibernate 的 grails,虽然很象 rails,但是技术栈太深了......

但是协作还是需要的,除了用消息引擎粘合之外,有没有人尝试用 drb 解决 ruby 和 java(jruby) 之间的协作呢?

我之前用过一阵子,就是因为它可以把我的 ruby 代码加密成 java 字节码文件,除了这个好外之外,我没有用它的必要了。

能不用还是不要用了,除了一些小的细微的 BUG, JRuby 部署慢,另外调试更是抓狂。

我们的老大和销售给开发团队设立了一个目标:将现几个 Web apps 用 JRuby 编译,打包成一个 war 文件,交付给客户,让客户能够一键部署。

这个目标在老大眼里优先级很高,于是团队就跟 Jruby 的关系就若即若离,非常暧昧。

别厌烦啊,我们还准备用 Jruby 部署。

http://pragprog.com/book/jkdepj/deploying-with-jruby

#4 楼 @lgn21st 我们也是,老大们觉得 java 听上去可靠很多。。。所以每次都要 warble

java 就两个优势:1、跨平台;2、有很多遗留系统。不在这个范围内的应用就可以考虑不用 jruby 了

话说有人考虑过我博客里面说的方案么?性能如何?我想不清楚怎么做压测

#7 楼 @fsword Java 的生态环境很完整,企业应用场景也很多。性能上,其实 JRuby 还凑合,除了耗内存大一点,单一处理慢一点,在量大的情况下,性能优势就体现出来了。

#8 楼 @gene_wu jruby 性能不是还凑合,而是相当不错,只不过启动较慢而已,另外我猜未来是协程的天下,java 社区的多线程并发方案会越来越不突出

最近在看 Akka 2.0, typesafe 的 stack 真是好!..

play 2.0 已经基本都是模仿了 rails 的型了。但是性能上没在一个量级上。这个很可怕。不细说.. .有兴趣自己去看吧。

#9 楼 @fsword 线程和协程只是并行。为了并发,Java 系的往往需要消息中间件或者之类的东西

#11 楼 @bhuztez 现实需求是并发,至于是否并行并不重要,所以我关心的是对并发问题的解决方案,简称并发方案。另外,线程虽然不好界定,但是协程却不能算是并行吧

#10 楼 @Saito play 也算有些时间了,没觉得惊艳,我一直觉得 java 系的前途是 douyu 那样的方案,可惜......

actor 模型大家都有,不过关键是库支持,比如 erlang 就完全不用担心,因为语言会约束你朝着正确的路上狂奔,这一点其它技术都不能比

#13 楼 @fsword play 1.0 跟 play 2.0 是完全不同的东西。

play 2.0 加入了 typesafe 组织。从 scala -> akka -> play 一整套体系。还是挺不错的。

#15 楼 @comme 这个挺有趣,不过我关心的是分布式通信的性能,不知道谁做过研究,有没有结论

#16 楼 @fsword 分布式怎么样我不知道,反正单机情况下,Java 系的 Actor Model 都被 GC 拖死了。而那个 disruptor 的实现,更接近于我先占一大片内存下来,我自己管理内存...

https://code.google.com/p/disruptor/

#17 楼 @bhuztez scala 默认的 actor model 有这个问题。

akka 是没有的。

#18 楼 @Saito 为啥,akka 有高科技?scala 消息的实现挺快的啊,不比 Erlang 慢啊,问题是发的消息里面有需要被 GC 的就不行了。

#19 楼 @bhuztez 没看过具体实现,最近想要看看。

#10 楼 @Saito play 的 Model 层并没有完全 ActiveRecord 化吧。依然使用 类似 Blog.find("where name=?","google") 这样的语法。

#21 楼 @WilliamZhu Play 本身是没有后端的。官方推荐的是 Ebeans. Ebeans 是类似 hibernate 的 orm 工具。具体来说属于 DM 模式。世间不只有 AR.

#22 楼 @Saito

Ebean.find(Order.class)  
                .fetch("details", new FetchConfig().queryFirst(20).lazy(20))  
                .setMaxRows(100)  
                .where().eq("status",Order.Status.NEW)  
                .order().desc("id")  
                .findList();  

ebeans 的 find 是这样的。

#23 楼 @Saito 说实话我不喜欢这种风格。 甚至

Order.where({:status=>1,:name=>"tt"});

这个 hash 做参数的方式我也不喜欢。 hash 做参数唯一的好处是方便直接接受用户传递来的参数构建 where 条件。否则我觉得最合服只觉得应该是

Order.where(“status=>1 and name=>'tt‘”);

#23 楼 @Saito 而且 默认 AR 的 query interface 还是最简洁的。EBean 的查询方式看你的代码就比较无语了...典型的一个折中产物...

#25 楼 @WilliamZhu 这种差别只是因为 Ebeans 是 Java 写的,链式调用已经很不错了。

另外 Ruby 的 Datamapper 跟 Activerecord 库的调用方式大部分都是类似的。很容易就迁移过去了。

#26 楼 @Saito 我不知道为什么 Play 不实现这套机制 (http://www.iteye.com/topic/1125807.因为框架本身已经使用了字节码修改的技术。为何不做的彻底一点呢?) ps: 链接地址是一个 java 开源框架提供的是实现。非常测彻底。整个实现,包括 controller 层不超过一个月。其实大部门互联网应用核心就是 model 层。如果能简化 model 层,那么你的整个开发代码就简化了。

;'( 不稀饭什么东西都往 java 靠....

需要 登录 后方可回复, 如果你还没有账号请 注册新账号