PayPal从Java迁移到Node.js

Node.js at PayPal | PayPal Engineering Blog

从历史上看,我们的工程团队已经被分割成两个部分:开发基于浏览器(使用HTML,CSS和JavaScript)的代码和那些开发应用层(使用Java)。

想象一下一个HTML开发者要求Java程序员将两个页面连接在一起?

Node.js通过启用浏览器和服务器统一的JavaScript应用程序解决这个问题。它统一了我们的专业工程师组成一个统一团队,让我们在技术堆栈的任何层次了解和应对用户的需求。

node.js效果:
少量人两倍开发效率
减少33%行代码
减少40%文件

这令人鼓舞的证据表明,我们的团队可以用JavaScript开发得更快。我们当初搁置Java应用开发,而加大了对JavaScript投入。

好消息是,Java工程师一开始对node.js不确定,后来兴高采烈地转移到了node.js,并愉快地致力于并行工作流,为我们提供了双倍于我们最初看到的生产力。

性能是一个有趣的和有争议的话题。在我们的例子中,我们有两个应用程序具有完全相同的功能,并通过大致相同的团队构建:一个在我们内部基于Spring的Java框架,一个是基于kraken.js使用express dust.js等构建。

Java性能:

相对Java,每秒处理请求提高两倍。平均响应时间降低35%。

banq个人意见:异步非堵塞的效率在性能和吞吐量上显现效果。

[该贴被banq于2013-11-29 17:14修改过]
[该贴被banq于2013-11-29 17:17修改过]

文章中提到了Paypal的Node.js框架Kraken。

Kraken 基于 grunt 和 Express,相比而言,它提供了更加稳健的功能合集,支持本地化、环境配置、更加注重应用程序安全等。这里解释下,Express 是 Node.js 的一个 MVC 开发框架,支持 jade 等多种模板,是目前 Node.js 上最流行的 Web 开发框架,通过提供一系列强大特性帮助开发者创建各种 Web 应用。

2012 年 4 月,David Marcuss 成为 PayPal 的总裁,并任命工程师团队在 6 周内完成支付系统的重写。大家应该清楚下,该支付系统是为 PayPal 带来 35 亿美元收入的系统。最终,工程师团队用了 8 周时间完成了该项任务,他们选择了 Node.js 对系统进行重新开发。当然,PayPal 的其他大量的子系统还需要整合到 Node.js 系统,所以起初 Node.js 仅是一个快速开发原型架构。

后来,PayPal 越来越多的新开发都逐渐采用 Node.js 和其他开源软件来完成,这就促成了一个可以快速开发 Web 应用的 Kraken.js 项目的诞生。

Kraken:PayPal公司的开源Node.js框架

当初Java为什么开始火?那是因为美国的支付宝采用了Java,当时中国支付宝可能还没有诞生,大概正在选型吧。

java大型网站都有哪些案例呢?http://www.jdon.com/14057

如今Paypal突然从Java转向Javascript,他们原先使用的是Spring,这对Spring也是打击,Spring 4.0忙不迭地推出:
http://www.jdon.com/45971

javascript在他18岁生日那天宣布下一步进军企业市场,如同当初Ruby那样想将铁轨铺进企业那样雄心勃勃:
http://www.jdon.com/45948

现在又有一篇质疑迁移的:
About PayPal's Node vs Java “fight”

作者自己是一个C语言,当初他自己手工微调的C语言版本算法至少慢于JVM大概20%,他突然明白:手动调校Ç以后也许没用了。

Node.js的运行的JavaScript V8引擎的虚拟机上。这是JavaScript的一个非常快的虚拟机。其中质疑主要是JS是单线程,而JVM是多线程的。我个人认为不从人多力量大角度理解,人多好办事,但是也会产生矛盾,内部争斗,多线程堵塞是性能罪魁祸首,而JS虽然单线程,但是基于EDA事件驱动却是提高吞吐量的主要途径。

作者推测是因为Spring过于复杂导致迁移。

该作者认为Paypal的NodeJS框架是in-house框架,其实这是贴标签的不理智定义,Paypal把这些诞生于in-house的框架开源以后,成为事实上公众标准,到那时能叫in-house吗?Spring当初不也是in-house的吗?所以,从这个角度质疑Paypal没有击中要害,另外一个质疑点是性能,这个也不是很站得住脚。Ruby当初性能就不咋样,不也是攻城略地吗?更何况现在比较下来Node.js还比Java快呢(吞吐量大也是快的一种指标):从每秒1.8页提升到每秒3.3页。

作者最后更新声明:不是质疑Paypal,而是质疑那些片面的引用从每秒1.8页提升到每秒3.3页,然后就以此依据从java切换到Node.js了。一些人认为Java Web开发比Node.js的困难是误用的证据。

banq个人认为:JVM好,但不一定要使用Java,因为Java 7以后JVM支持多种语言,比如Vertx就是基于JVM支持JS 和ruby等多种动态语言。http://www.jdon.com/concurrent/vertx.html

[该贴被admin于2013-12-14 18:40修改过]

个人观点:Java经过这么多年的积累,有它强的一面。如果一个公司赖以生存的业务,经过多年沉淀,基于JAVA平台,我觉得应该继续加强。
用什么语言,都是次要的,达成目标才是正确的,重要的事情。

NodeJS目前看来,仍然很年轻。V8引擎虽然快,但谷歌仍然在持续改进它。根据发展的势头,貌似是想再造一个类似于JVM一样的虚拟机运行时的东西。

我不觉得它可以完全就替代了JAVA。世界是多元的,多语言必将长期并存。

JAVA语言本身可能有点老旧,但是JVM虚拟机,将青春常在。我更看好JVM这个平台。如果有需要,可以用scala,clojure。

积累了多年的JVM平台经验,完全推倒,重新换一个平台。何必呢?

我觉得 不是推倒重来的问题,是核心理念 node.js 带来了新的开发理念。