Node.js 在 PayPal實戰

yupeng發表於2013-12-15

之前有過一個談了很多關於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/

相關文章