PayPal为什么从Java迁移到Node.js,性能提高一倍,代码减少44%

Kris_zcl 发布于 2013/12/12 10:32
阅读 7K+
收藏 16

大家都知道PayPal是另一家迁移到Node.js平台的大型公司,Jeff Harrell的这篇博文 Node.js at PayPal  解释了为什么从Java迁移出来的原因: 开发效率提高一倍(2个人用更少的时间干了5个人的活), 性能提高一倍, 代码量减少33%, 文件减少40%:

(小编: 个人认为深层次原因是Java正在越来越走向封闭,而且变得越来越复杂而且oracle正在对Java收费,参见: Oracle计划发布收费版JVM , 这促使了越来越多的公司加入了去Java化的队伍)

外面有很多人说PayPal正在迁移到node.js平台。我很高兴地在这里宣布,传言是真的,我们正在从Java迁移至node.js

由于历史原因,我们的工程师一直分为两拨人,一拨在浏览器上写代码(HTML,CSS,JavaScript);另一拨用Java写应用层的代码。 想象一下,一个写HTML的不得不去叫一个写Java将A/B两个页面链接到一起吗?我们正在这样干,我们称这样的人为全端工程师,那些即可以设计精美界 面和服务器后台的那些人。现在前后端已经没有界限了,这曾经是阻碍PayPal发现的一个很大的瓶颈。

Node.js帮助我们将前、后端合二为一,现在我们一个全端团队即可解决用户的所有问题。

 

早期采纳

像其他人一样,我们刚开始使用node.js做了一些demo用的原型程序。跟很多人一样,她表现出来的超高性能,让我们最终决定把她放到线上去。

我们最初使用express来路由请求,nconf用来配置,grunt用来创建tasks。Express非常普及,但是我们发现Express 在多个团队协作时表现出的可伸缩性不足,它并不适合所有场合。Expres非常灵活,但在大型团队开发上的可扩展性不佳。最终我们的队员基于原生的 node.js,并创建了Karken.js;她并不是一个框架,更像是一个规范,但相对于express,她更适合大型团队的扩展。我们希望我们的工程 师专注他们的应用,而不是专注他们的运行环境。

我们已经在内部使用kraken.js好几个月了(我们马上会把他开源的!)我们的工程师非常渴望这个内部框架能尽快上线。

(小编:预测karken.js即将是,另一个超火的后端框架,火热程度参考twitter的bootstrap)

将node.js布署到线上

我们第一个采用nodejs的产品不是一个小的应用;是我们的浏览量最多的用户首页。我们希望步子迈得大一点,但是我们清楚知道其中的风险,所以我 们同时还并行地运行了一个Java的程序。我们在开发和扩展Java方面非常有经验。所以一旦node.js应用出问题了,我们可以立即切回Java。不 过,同时我们也发现了一些非常有意思的数据。

 

开发

从1月份开始,我们花了几个月的时间来搭建node.js的基础设施。比如:sessions(会话),centralized logging(集中日志),keystores(存储)。在这期间我们有5位Java工程师在开发Java。在开发了两个月后,两位工程师开始开发 node.js应用。在6月初两个团队的开发进度已经一样了,两者的功能完全一样。开发node.js应用的那个小团队,尽管推迟了两个月,但是很快赶上 了。这里我们对这些相同功能做的一些单元测试得出的结果:


Node.js的是:

更少的人开发的node.js应用比Java的快一倍;
节省了33%的代码量;
少了40的文件;

(小编,这里作者的意思并不是Java程序员的素质没有node.js的好,Java语言的特点决定她需要更多的人,更多的时间,更多的代码去完成在node.js下的同样的工作,并且吃力不讨好。参考:他们为什么说面向对象有问题,探讨面向对象的一些缺陷 ;性能测评:Node.JS比Java EE快20%

这是一个非常鼓舞人的证据,我们似乎应该更快地迁移到JavaScript平台上去。我们立即做了一个决定,暂停Java应用的开发,全心全意开发 JavaScript应用。这对开发Java项目的工程师来说是个好消息,他们已经消除了对node.js的疑虑,非常高兴地投入到了并行的 node.js开发上来,这样我们的开发效率提高了两倍。

 

性能

性能是一个非常有意思和具有争议性的话题。在我们这,我们有两个平台实现完全一样功能的程序;一个是使用基于Spring的内部Java框架;另一 个是基于kraken.js,express,dust.js和其他开源框架。 这些程序包含三个API,每个API来响应2到5个请求,由Dust来模拟获取数据和显示页面。

我们用线上的环境去测试这两个应用,并收集了完成响应的时间和请求数。

 

node.js vs Java 性能对比

在这张图上你可以看到node.js应用的优势:

 

Node.js vs Java performance graph


每秒请求数量是Java的两倍。不过更有意思的是我们仅使用了单核的node去跟5核的Java来对比,我们非常希望将来继承扩大node.js的优势。
渲染相同的页面,node.js节省了35%的时间。即每个页面节约了200豪秒,用户可以清楚地感觉到这样的区别。

 

未来

我们将继续使用node.js来构建我们的Web应用。像我们正在开发的那些门户,和已经上线的用户概览页面。还有一打正在进入Beta测试的那些工程,我们会继续分享我们在上线过程中的经验,数据。对于PayPal来说这是一个另人激动的时刻。


转自:http://ourjs.com/detail/52a914f0127c763203000008


加载中
1
JerryLin
JerryLin

引用来自“宏哥”的答案

回复 @JerryLin

perl, lua, python, php , pl/php, pl/python, pl/sql , pl/pgsql, tcl/tk,c, c++, java,abap, apex.............

够不够多

见过还是用过?

真的用过这么多语言,似乎不会有那么多纯粹为喷而喷的废话。

“java确实是所有开发语言当中, 开发效率最低的。” ,你把C/C++/FORTRAN/汇编这些语言放在何处?

真的用过这么多语言,你应该知道不同语言之间本质的区别是设计时的观点和定位。至于表现形式,从词法到语法,你觉得语言之间有本质区别吗?

J2ee和python相比,开发网站应用,多写的代码多在什么地方?

萌龙
萌龙
FORTRAN的开发效率还可以把
1
南湖船老大
南湖船老大

引用来自“梅开源”的答案

引用来自“Mallon”的答案

如果单纯从计算性能上比较,java和native code基本差不多。但是java的web框架十几年根本就没有什么发展,根本无法适应web 2.0应用,效率低是自然的。
赞同。个人感觉java从某些年代开始就被一帮擅长吹嘘各种规范各种模式各种代码洁癖的老外引入了非效率开发的歧途。对web框架的讨论,java常常是围绕用了什么模型用了什么模式展开,少见有讨论怎么省事的。

呵呵,文章讨论Js呢,PHPer也跑来凑热闹了。我只想说,Java程序员比PHPer更懂PHP。。说Java吹嘘各种规范各种模式各种代码,PHP社区更是亦步亦趋的有样学样,更加会包装。PHP才是青出于蓝而胜于蓝啊!

    我知道的恰恰是,PHP一直跟在Java屁股后走。PHP的官方框架Zend Framework学Java就不说了,Java这两年从XML配置转为注解配置,PHP也在模仿。雷人的是,PHP根本没有注解这个语法元素,好吧,PHP把参数和配置写到了方法的注释里,file_get_contents读入整个文件,然后token_get_all读取注释,分析。。有点雷!ZF就是这么做的,而且只是其中之一,也不仅仅ZF这么做。不过这功能也是PHP框架的卖点之一哦,建议你学一学哦,很时髦地哦~

<?php
class User
 {
 /**
 * @Annotation\Exclude()
 */
 public $id;

 /**
 * @Annotation\Filter({"name":"StringTrim"})
 * @Annotation\Validator({"name":"StringLength", "options":{"min":1, "max":25}})
 * @Annotation\Validator({"name":"Regex", "options":{"pattern":"/^[a-zA-Z][a-zA-Z0-9_-]{0,24}$/"}})
 * @Annotation\Attributes({"type":"text"})
 * @Annotation\Options({"label":"Username:"})
 */
 public $username;

Java搞了个JSR,现在都到200多了,好吧,PHP也来搞个PSR,搞到4了,5在计划中。。

成年旧账也就不提了,什么Phar模仿Jar,什么phing模仿Ant,PHP社区也越玩越HI了,又玩起了组件化,咦,这个东西怎么越看越像Java里的maven/gradle啊。

     要拿规范和模式说话的话,SF,YII,ZF哪个不是往这方面发展?这让PHPer情何以堪。Java 程序员越玩越轻松,因为最难的OO和模式关都过了,而且Java开发由繁到简。PHPer则越玩越苦逼,

“啊?PHP程序员也要懂OO了,据说不懂OO不好找工作啊?
啊,那个公司用的symfony 2框架,听说类似Java,我有点怕怕啊,怕我学不会?
啊,YII用了很多设计模式,会不会很难啊?
啊,PHP社区玩起了Composer,这是啥东东,不明觉厉!
啊,听说ZF2比ZF1改了很多啊,我是PHPer啊,OO真的是软肋啊,咋办啊,好难学啊”

pantrick
pantrick
哈哈,说的很有道理,php我也搞过,从如果oo不好,为啥从4开始一直在搞类,虽然和java相比不伦不类,但是还是越来越成熟了,感觉一伙不懂oo的到处在吹过程怎么好,python 比java早了吧,为啥没像java那样火起来,c,和c++ 都比java早多少年,也没java这么火吧,用常识就能得出结论的问题,有些人却偏需要用有限的智商去理解,不知道是进步还是退步!
猎户座
猎户座
表示学习了,
0
mallon
mallon
如果单纯从计算性能上比较,java和native code基本差不多。但是java的web框架十几年根本就没有什么发展,根本无法适应web 2.0应用,效率低是自然的。
vietor
vietor
一直认为spring之类的成熟框架害了它。与时代脱节却不思进取。
0
宏哥
宏哥

不了解node.js

但是java确实是所有开发语言当中, 开发效率最低的。 

这个事情和Oracle没有什么关系

JerryLin
JerryLin
你用过几个语言?
0
mallon
mallon

引用来自“宏哥”的答案

不了解node.js

但是java确实是所有开发语言当中, 开发效率最低的。 

这个事情和Oracle没有什么关系

其实C++更低,还打肿脸充胖子冒充高级语言
0
宏哥
宏哥

引用来自“Mallon”的答案

引用来自“宏哥”的答案

不了解node.js

但是java确实是所有开发语言当中, 开发效率最低的。 

这个事情和Oracle没有什么关系

其实C++更低,还打肿脸充胖子冒充高级语言

我差点把C++忘记了


0
宏哥
宏哥

回复 @JerryLin

perl, lua, python, php , pl/php, pl/python, pl/sql , pl/pgsql, tcl/tk,c, c++, java,abap, apex.............

够不够多

cswy
cswy
0
宏哥
宏哥

你那么多屁话我就不多说了, 只说两个:

J2ee和python相比,开发网站应用,多写的代码多在什么地方

-- 类型转换

java 和C 语言比较

-- 如果做一个fork(),  java不知道能不能在100万行代码以内来实现?  

0
mallon
mallon

引用来自“宏哥”的答案

你那么多屁话我就不多说了, 只说两个:

J2ee和python相比,开发网站应用,多写的代码多在什么地方

-- 类型转换

java 和C 语言比较

-- 如果做一个fork(),  java不知道能不能在100万行代码以内来实现?  

J2ee和python相比,开发网站应用,多写的代码多在什么地方

还有Java带来的思维定势,Javaer习惯用复杂的类继承而不是简洁的数据结构描述问题

JerryLin
JerryLin
回复 @小-菜 : 你为什么一定要用继承,java不能用来做过程式开发?
小-菜
小-菜
太他妈对了,搞那么多继承,看起来很牛逼,其实就是垃圾啊,很简单的数据结构就能搞定,没有看清本质。。。。
小吱
小吱
+1
0
缪斯的情人
缪斯的情人
我就不相信他们会全部迁移到nodejs,但是能推测他们未来发展趋势java ——》nodejs——》java/scala/c++(nodejs)
华兹格
华兹格
+1 美丽的幻觉是正常的
返回顶部
顶部