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

大家都知道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应用的优势:

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

未来

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

原文地址: paypal-engineering.com

[转载]PayPal为什么从Java迁移到Node.js,性能提高一倍,文件代码减少44%的更多相关文章

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

    大家都知道PayPal是另一家迁移到Node.js平台的大型公司,Jeff Harrell的这篇博文 Node.js at PayPal  解释了为什么从Java迁移出来的原因: 开发效率提高一倍(2 ...

  2. PayPal为什么从Java迁移到Node.js

    前言 大家都知道PayPal是另一家迁移到Node.js平台的大型公司,Jeff Harrell的这篇博文 Node.js at PayPal  解释了为什么从Java迁移出来的原因: 开发效率提高一 ...

  3. 你不知道的Node.js性能优化,读了之后水平直线上升

    本文由云+社区发表 "当我第一次知道要这篇文章的时候,其实我是拒绝的,因为我觉得,你不能叫我写马上就写,我要有干货才行,写一些老生常谈的然后加上好多特技,那个 Node.js 性能啊好像 D ...

  4. node.js使用express框架进行文件上传

    关于node.js使用express框架进行文件上传,主要来自于最近对Settings-Sync插件做的研究.目前的研究算是取得的比较好的进展.Settings-Sync中通过快捷键上传文件,其实主要 ...

  5. 在 Node.js 中处理大 JSON 文件

    在 Node.js 中处理大 JSON 文件 场景描述 问题一: 假设现在有一个场景,有一个大的 JSON 文件,需要读取每一条数据经过处理之后输出到一个文件或生成报表数据,怎么能够流式的每次读取一条 ...

  6. 写给Java开发者的Node.JS简介

    前言 今天上推特看见这篇文章,点进去发现是新货. 正好最近想入Node的坑,又有一些Java基础,所以希望翻译出来给大家,同时也让自己加深理解. 才疏学浅,如有不妥之处请指正. 原文链接:Node f ...

  7. 【转载】Centos系统采用NVM安装Node.js环境

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用来方便地搭建快速的易于扩展的网络应用.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又 ...

  8. Node.js性能分析神器Easy-Monitor

    摘要: 使用Easy-Monitor,可以准确定位Node.js应用的性能瓶颈,帮助我们优化代码性能. 当应用出现性能问题时,最大的问题在于:如何准确定位造成性能瓶颈的代码呢?对于Node.js开发者 ...

  9. Node.js新手教程——怎样实现文件上传功能

    作者:zhanhailiang 日期:2014-11-16 本文将介绍怎样使用Node.js实现文件上传功能. 1. 初始化项目信息:npm init [root@~/wade/nodejs/node ...

随机推荐

  1. 深入理解Java类加载器(2)

    1 基本信息 每个开发人员对Java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,这背后就涉及到了java技术体系中的类加载.Java的类加载机制是技术体系中比较核心的 ...

  2. 微信小程序wx:for和wx:for-item的正确用法

    wx:for="{{list}}"用来循环数组,而list即为数组名wx:for-item="items" 即用来定义一个循环过程中每个元素的变量的 如果是一维 ...

  3. 字符串经过base64编码后的长度与原字符串的长度是什么关系呀?

    beforeEncode为Encode之前的字符串 那么Encode后的字符串长度为: 1.如果beforeEncode.length()是3的整数倍,那么长度为  (beforeEncode.len ...

  4. Longest Increasing Subsequence的两种解法

    问题描述: 给出一个未排序队列nums,如[10, 9, 2, 5, 3, 7, 101, 18].找出其中最长的增长序列,但不是连续增长序列,如[2, 3, 7, 101]就是对应的最长增长序列LI ...

  5. Kafka日志存储原理

    引言 Kafka中的Message是以topic为基本单位组织的,不同的topic之间是相互独立的.每个topic又可以分成几个不同的partition(每个topic有几个partition是在创建 ...

  6. npm 镜像修改

    1, 修改 下载仓库为淘宝镜像  npm config set registry http://registry.npm.taobao.org/ 2, 如果要发布自己的镜像需要修改回来  npm co ...

  7. 知乎回答:每日完成任务用于打卡的APP

    其实我也一直在寻找最佳的解决方案.安卓上有这样的,叫做HabitHub.用过一段时间,不容易坚持,这个软件对于培养习惯来说无疑是最好的,但是仅限于记录,这样的软件实在太多.我这里提供一下我自己的方法, ...

  8. mysql的check约束问题

    mysql手册中写道:存储引擎会解析check子句,但是会把它忽略掉 The CHECK clause is parsed but ignored by all storage engines. 现在 ...

  9. AFO NOI2018退役——菜鸡一直是菜鸡

    游记DAY -INF连续几天的模拟让我确信我就是菜鸡.以及相信yxd,sjq,cyl神犇一定能够稳了. DAY 0报道,天很热热热热热热热热热. DAY 1开幕式,杜子德很热热热热热热热热热. DAY ...

  10. linux内核分析综合总结

    linux内核分析综合总结 zl + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核分析 ...