之前有过一个谈了很多关于PayPal移动到node.js的一个应用平台。作为设置我的免费用户界面的第1部分的延续,我很高兴地说,这些传言是真的,我们的Web应用程序正在从Java迁移到JavaScript和node.js中。

从历史上看,我们工程团队的代码已经被分割成浏览器层(使用HTML , CSS和JavaScript )和应用层(使用Java ) 。试想一下,一个HTML的开发人员要求一个Java开发人员将“A”和“B”页面连接在一起,但是这就是我们。该模型通过引入全栈工程师,落后那些能够创造一个好的用户界面,然后生成应用程序去支持它。称他们为独角兽,但是这就是我们想要的,在PayPal中,主要阻滞剂是我们在浏览器和服务器之间建立的人工边界。

Node.js 使用javascript,通过建立浏览器和服务端的应用程序帮助我们解决了这个问题。它统一了我们团队,让我们在技术堆栈上了解和应对我们用户的任何需求。

早期使用Node.js

和其他一样,我们把Node.js 作为一个原型的平台。同其他一样,它表现了很好的性能,我们决定在产品上使用它。
最开始的时候,我们使用express作为路由,nconf来作为配置,grunt来建立工作流。我们特别喜欢express框架的普及,却发现它并没有在多个开发团队很好地扩展。express是非强制性的,并允许您在任何方式合适地去设置一个服务器。它非常灵活,但不利于在大型团队中保持一致。随着时间的推移,我们看到的模式脱颖而出,更多的人拿起node.js的转身进入Kraken.js ,它不是一个框架本身,而是基于express的一个层,允许它扩展到更大的组织。我们希望我们的工程师专注于打造自己的应用程序,而不是仅仅着眼于建立自己的环境。
到现在为止,我们在内部使用kraken.js 已经有几个月了(不久,我们将会开源),我们的工程师团队期望将它变成一个实时的公司内部的node.js应用程序。

促使Node.js 到产品上

我们首先在产品上尝试node.js不是一个小的应用程序,它是我们的账目总览页面,这个页面具有很大的流量。我们打算去使用,但是我们也得降低风险,

于是我们同时建立了一个java应用程序。我们知道如何去部署和度量java应用程序,因此如果在node.js 程序出了任何问题,我们能够迅速的切换到java上来。它提供对一些数据的设置。

部署

我们在1月份就开始了,它花费了我们几个月的时间去研究node.js必要的基础东西。比如sessions, centralized logging, keystores。在这段时间内我们有5名工程师在使用java工作。在2个月的java开发后,2名工程师开始使用node.js 并行开发 app。在7月初的时候,他们相互沟通了一下,他们的应用程序具有相同功能。node.js的应用程序,是以一个更小的团队在2个月后开始,但是很快就追上了。有几个细节脱颖而出后,我们运行测试案例,两个应用程序通过相同的功能测试。node.js 是:

1)更少的人去建立,几乎是2倍甚至更快的速度
2)少了33% 的代码
3)建立40%甚至更少的文件

这个提供了一个令人鼓舞的消息表明javascript可以更快的工作。我们都同意并且做了一个决定:将java应用程序搁置了。但是问题是java工程师在项目上,开始的时候对转向node.js并且很高兴的在我们的工作流中提交代码,提高我们双倍的生产力不太自信。

性能

性能是一个高兴而有争议性的话题,在我们的案例中,我们一个团队有2套功能相同的应用程序:一个使用java 基于Spring而另一个基于kraken.js 使用 express, dust.js 和其他的开源代码。这个应用程序包含了3套路由,并且每一套路由2个或者5个请求,数据是通过Dust去渲染页面的。

在我们的测试路由中,我们收集的数据是吞吐量和响应时间

你能看到在我们的node.js 应用程序中:

1)与Java应用程序相比较,双倍的每秒请求。更有趣的是,Node.js应用程序是单核,而在Java中五核。我们希望进一步增加这个鸿沟。
2) 35%的跌幅,平均响应时间在同一页。这导致响应200ms的快一些用户肯定会注意到。

对于这个结果我申明一下:我们的框架使用2种不同的应用程序,它仅仅在不同的技术上的是一个对等测试。有可能你的区别更大。也就是说,我们非常激动的看到了node.js表现出的性能。

未来

所有我们的用户将使用我们用node.js构造的web应用程序。一些我们已经在线上了,一些我们正在开发,处理beta状态。还有很多的应用程序我们已经在迁移计划中。我们将会分享我们线上的数据,对于PayPal工程师来说,这个是一个非常激动人心的时刻!

原文地址:https://www.paypal-engineering.com/2013/11/22/node-js-at-paypal/

Node.js 在 PayPal实战的更多相关文章

  1. Node.js基础与实战

    Node.js基础与实战 Node.jsJS高级进阶 NODE原理与解析 REPL交互环境 模块与NPM Buffer缓存区 fs文件操作 Stream流 TCP&UDP 异步编程 HTTP& ...

  2. [js高手之路]Node.js+jade+mongoose实战todolist(分页,ajax编辑,删除)

    该系列文章索引: [js高手之路]node js系列课程-创建简易web服务器与文件读写 [js高手之路]node js系列课程-图解express+supervisor+ejs用法 [js高手之路] ...

  3. Node.js静态文件服务器实战[转]

    p.s. 在下面这篇文章的指导下,做了一个静态文件服务器,见:https://github.com/walkerwzy/node_static_server ==== 这是一篇阐述得比较详细的文章,从 ...

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

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

  5. iKcamp新书上市《Koa与Node.js开发实战》

    内容摘要 Node.js 10已经进入LTS时代!其应用场景已经从脚手架.辅助前端开发(如SSR.PWA等)扩展到API中间层.代理层及专业的后端开发.Node.js在企业Web开发领域也日渐成熟,无 ...

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

    http://ourjs.com/detail/52a914f0127c763203000008 大家都知道PayPal是另一家迁移到Node.js平台的大型公司,Jeff Harrell的这篇博文 ...

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

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

  8. Node.js爬虫实战 - 爬你喜欢的

    前言 今天没有什么前言,就是想分享些关于爬虫的技术,任性.来吧,各位客官,里边请... 开篇第一问:爬虫是什么嘞? 首先咱们说哈,爬虫不是"虫子",姑凉们不要害怕. 爬虫 - 一种 ...

  9. 【干货分享】Node.js 中文学习资料和教程导航

    这篇文章来自 Github 上的一位开发者收集整理的 Node.js 中文学习资料和教程导航.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念,它的目标是帮助程 ...

随机推荐

  1. MVC过滤器

    MVC的每一个请求都会给相应的控制器的对应行为方法处理,那么想在这些处理的前 前后后增加一些额外的逻辑处理,因此过滤器的作用就来了 MVC支持的过滤器类型有四种,分别是:Authorization(授 ...

  2. Lucene.Net+盘古分词器(详细介绍)(转)

    出处:http://www.cnblogs.com/magicchaiy/archive/2013/06/07/LuceneNet%E7%9B%98%E5%8F%A4%E5%88%86%E8%AF%8 ...

  3. Exception in thread “main” com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: empty String

    String json="A valid json"; Job job = new Gson().fromJson(json, Job.class); Exception in t ...

  4. Android性能优化方法(六)

    ContentProvider优化改进 1.索引简单的说,索引就像书本的目录,目录可以快速找到所在页数,数据库中索引可以帮助快速找到数据,而不用全表扫描,合适的索引可以大大提高数据库查询的效率.(1) ...

  5. VM - Bridge Adapter

    如何让外部可以连到本地的虚拟机. 1. 网络模式 - Bridged Adapter 2. 确保本机插上网线 3. 如果虚拟机是 Windows 8.1, 需要开启如下选项.

  6. ubuntu Screen 的比较详细的命令

    Linux Screen Commands For Developers 转自:http://fosshelp.blogspot.com/2014/02/linux-screen-commands-f ...

  7. 4.2.1 网络请求之HTTP

    HTTP请求&响应:(常用的只有Post与Get,还有Head/put/delete/connect/options/trace) Get&Post(建议用post规范参数传递方式,并 ...

  8. 解决"java.lang.ClassNotFoundException: com.mysql.jdbc.Driver"

    按照以前的老方法,写Java的主程序通过JDBC来连MySQL. //1: import java.sql.*; import java.sql.*; public class JDBC_Driver ...

  9. SPOJ ONEZERO(搜索)

    搜索的好题,,,, 摘自题解: 题意: 给一个数n,求n 的最小的倍数,满足它的10进制 表示中每一位不是0就是1. 思路: 用f(x)表示被n整除取模后的最小数,那么从0开始,每次往后添0或者1,如 ...

  10. HTTPD服务 openssl的https服务机制

    环境: 环境: httpd服务器:10.140.165.169 CA服务器:10.140.165.93 CA服务器配置: 1.安装openssl [root@cnhzdhcp16593 ~]# yum ...