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