PayPal為什麼從Java遷移到Node.js 效能提高一倍 檔案程式碼減少44%

ourjs發表於2013-12-22

  大家都知道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下的同樣的工作,並且吃力不討好。)

  這是一個非常鼓舞人的證據,我們似乎應該更快地遷移到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來說這是一個另人激動的時刻。

相關文章