原文:http://ourjs.com/detail/52a914f0127c763203000008?from=groupmessage&isappinstalled=1
英文地址: paypal-engineering.com
大家都知道PayPal是另一家遷移到Node.js平臺(tái)的大型公司,Jeff Harrell的這篇博文 Node.js at PayPal 解釋了為什么從Java遷移出來的原因: 開發(fā)效率提高一倍(2個(gè)人用更少的時(shí)間干了5個(gè)人的活), 性能提高一倍, 代碼量減少33%, 文件減少40%:
(小編: 個(gè)人認(rèn)為深層次原因是Java正在越來越走向封閉,而且變得越來越復(fù)雜而且oracle正在對Java收費(fèi),參見: Oracle計(jì)劃發(fā)布收費(fèi)版JVM http://www.infoq.com/cn/news/2010/11/oracle-to-release-two-jvms, 這促使了越來越多的公司加入了去Java化的隊(duì)伍)
外面有很多人說PayPal正在遷移到node.js平臺(tái)。我很高興地在這里宣布,傳言是真的,我們正在從Java遷移至node.js
由于歷史原因,我們的工程師一直分為兩撥人,一撥在瀏覽器上寫代碼(HTML,CSS,JavaScript);另一撥用Java寫應(yīng)用層的代碼。想象一下,一個(gè)寫HTML的不得不去叫一個(gè)寫Java將A/B兩個(gè)頁面鏈接到一起嗎?我們正在這樣干,我們稱這樣的人為全端工程師,那些即可以設(shè)計(jì)精美界面和服務(wù)器后臺(tái)的那些人?,F(xiàn)在前后端已經(jīng)沒有界限了,這曾經(jīng)是阻礙PayPal發(fā)現(xiàn)的一個(gè)很大的瓶頸。
Node.js幫助我們將前、后端合二為一,現(xiàn)在我們一個(gè)全端團(tuán)隊(duì)即可解決用戶的所有問題。
早期采納
像其他人一樣,我們剛開始使用node.js做了一些demo用的原型程序。跟很多人一樣,她表現(xiàn)出來的超高性能,讓我們最終決定把她放到線上去。
我們最初使用express來路由請求,nconf用來配置,grunt用來創(chuàng)建tasks。Express非常普及,但是我們發(fā)現(xiàn)Express在多個(gè)團(tuán)隊(duì)協(xié)作時(shí)表現(xiàn)出的可伸縮性不足,它并不適合所有場合。Expres非常靈活,但在大型團(tuán)隊(duì)開發(fā)上的可擴(kuò)展性不佳。最終我們的隊(duì)員基于原生的node.js,并創(chuàng)建了Karken.js;她并不是一個(gè)框架,更像是一個(gè)規(guī)范,但相對于express,她更適合大型團(tuán)隊(duì)的擴(kuò)展。我們希望我們的工程師專注他們的應(yīng)用,而不是專注他們的運(yùn)行環(huán)境。
我們已經(jīng)在內(nèi)部使用kraken.js好幾個(gè)月了(我們馬上會(huì)把他開源的?。┪覀兊墓こ處煼浅?释@個(gè)內(nèi)部框架能盡快上線。
(小編:預(yù)測karken.js即將是,另一個(gè)超火的后端框架,火熱程度參考twitter的bootstrap)
將node.js布署到線上
我們第一個(gè)采用nodejs的產(chǎn)品不是一個(gè)小的應(yīng)用;是我們的瀏覽量最多的用戶首頁。我們希望步子邁得大一點(diǎn),但是我們清楚知道其中的風(fēng)險(xiǎn),所以我們同時(shí)還并行地運(yùn)行了一個(gè)Java的程序。我們在開發(fā)和擴(kuò)展Java方面非常有經(jīng)驗(yàn)。所以一旦node.js應(yīng)用出問題了,我們可以立即切回Java。不過,同時(shí)我們也發(fā)現(xiàn)了一些非常有意思的數(shù)據(jù)。
開發(fā)
從1月份開始,我們花了幾個(gè)月的時(shí)間來搭建node.js的基礎(chǔ)設(shè)施。比如:sessions(會(huì)話),centralized logging(集中日志),keystores(存儲(chǔ))。在這期間我們有5位Java工程師在開發(fā)Java。在開發(fā)了兩個(gè)月后,兩位工程師開始開發(fā)node.js應(yīng)用。在6月初兩個(gè)團(tuán)隊(duì)的開發(fā)進(jìn)度已經(jīng)一樣了,兩者的功能完全一樣。開發(fā)node.js應(yīng)用的那個(gè)小團(tuán)隊(duì),盡管推遲了兩個(gè)月,但是很快趕上了。這里我們對這些相同功能做的一些單元測試得出的結(jié)果:
Node.js的是:
更少的人開發(fā)的node.js應(yīng)用比Java的快一倍;
節(jié)省了33%的代碼量;
少了40的文件;
(小編,這里作者的意思并不是Java程序員的素質(zhì)沒有node.js的好,Java語言的特點(diǎn)決定她需要更多的人,更多的時(shí)間,更多的代碼去完成在node.js下的同樣的工作,并且吃力不討好。參考:他們?yōu)槭裁凑f面向?qū)ο笥袉栴},探討面向?qū)ο蟮囊恍┤毕?http://ourjs.com/detail/528b2d6ab5cbfd990b000002;性能測評(píng):Node.JS比Java EE快20% http://ourjs.com/detail/52726d92031db63703000001)
這是一個(gè)非常鼓舞人的證據(jù),我們似乎應(yīng)該更快地遷移到JavaScript平臺(tái)上去。我們立即做了一個(gè)決定,暫停Java應(yīng)用的開發(fā),全心全意開發(fā)JavaScript應(yīng)用。這對開發(fā)Java項(xiàng)目的工程師來說是個(gè)好消息,他們已經(jīng)消除了對node.js的疑慮,非常高興地投入到了并行的node.js開發(fā)上來,這樣我們的開發(fā)效率提高了兩倍。
性能
性能是一個(gè)非常有意思和具有爭議性的話題。在我們這,我們有兩個(gè)平臺(tái)實(shí)現(xiàn)完全一樣功能的程序;一個(gè)是使用基于Spring的內(nèi)部Java框架;另一個(gè)是基于kraken.js,express,dust.js和其他開源框架。 這些程序包含三個(gè)API,每個(gè)API來響應(yīng)2到5個(gè)請求,由Dust來模擬獲取數(shù)據(jù)和顯示頁面。
我們用線上的環(huán)境去測試這兩個(gè)應(yīng)用,并收集了完成響應(yīng)的時(shí)間和請求數(shù)。
node.js vs Java 性能對比
在這張圖上你可以看到node.js應(yīng)用的優(yōu)勢:
每秒請求數(shù)量是Java的兩倍。不過更有意思的是我們僅使用了單核的node去跟5核的Java來對比,我們非常希望將來繼承擴(kuò)大node.js的優(yōu)勢。
渲染相同的頁面,node.js節(jié)省了35%的時(shí)間。即每個(gè)頁面節(jié)約了200豪秒,用戶可以清楚地感覺到這樣的區(qū)別。
未來
我們將繼續(xù)使用node.js來構(gòu)建我們的Web應(yīng)用。像我們正在開發(fā)的那些門戶,和已經(jīng)上線的用戶概覽頁面。還有一打正在進(jìn)入Beta測試的那些工程,我們會(huì)繼續(xù)分享我們在上線過程中的經(jīng)驗(yàn),數(shù)據(jù)。對于PayPal來說這是一個(gè)另人激動(dòng)的時(shí)刻。
聯(lián)系客服