淘寶網(wǎng)在2012年擁有4.5億用戶、600萬個賣家,當(dāng)年12月12日舉行的雙十二活動,就有超過200萬名賣家參與,淘寶還推出專屬個人的消費歷程「淘寶時光機(jī)」,呈現(xiàn)過去10年的個人化專屬購買歷程,為了快速地從10年間的龐大消費記錄中,分析出個人的消費歷程,Node.js技術(shù)專家袁鋒袁鋒指出,當(dāng)天此應(yīng)用流量創(chuàng)下歷史新高,遠(yuǎn)遠(yuǎn)超過其他分析數(shù)據(jù)類型的產(chǎn)品。
所幸,早在前一年,阿里巴巴後端就改用Node.js開發(fā),才能撐住這次暴增的流量,也因為淘寶經(jīng)常舉行一次性的特別活動,像是雙11和雙12等促銷活動,需要更高效能的架構(gòu),來因應(yīng)流量暴增的問題。
阿里巴巴在2011年開始導(dǎo)入網(wǎng)站開發(fā)框架Node.js,「測試完發(fā)現(xiàn)Node.js比PHP快至少5倍以上,就開始用了!」袁鋒表示,當(dāng)時的技術(shù)負(fù)責(zé)人發(fā)覺Node.js技術(shù),看中了簡單的特性,只有測試性地建了一個分析數(shù)據(jù)類型的產(chǎn)品,當(dāng)時實測後發(fā)現(xiàn)後端采用Node.js的效能比PHP快,就開啟了阿里巴巴與Node.js的旅程。
袁鋒在螞蟻金服負(fù)責(zé)所有用Node.js技術(shù)開發(fā)的專案,他同時也是中文Node.js技術(shù)社群CNode.org的核心成員,由於他所屬的部門都是從事開發(fā)分析數(shù)據(jù)類型的產(chǎn)品,「數(shù)據(jù)產(chǎn)品屬於高I/O流量!」他表示,原本用PHP撰寫而成的架構(gòu),因為I/O流量持續(xù)增加,讓原本的架構(gòu)不堪負(fù)荷。
阿里巴巴在2011年應(yīng)用開發(fā)端導(dǎo)入網(wǎng)站開發(fā)框架Node.js,看準(zhǔn)Node.js快速開發(fā)的特性,用Node.js開發(fā)應(yīng)用展示層所需要的功能。
Node.js最適合創(chuàng)造I/O密集型的應(yīng)用
由於分析數(shù)據(jù)類型的產(chǎn)品屬於I/O密集型應(yīng)用,為了要解決流量暴增的問題,非同步(Asynchronous)I/O就變成應(yīng)用開發(fā)端重要的課題之一,系統(tǒng)必須可以同時處理多個 I/O 要求,來分散流量,但是,以往用PHP開發(fā)應(yīng)用,很難達(dá)到這樣的目標(biāo)。
他表示,從PHP改用Node.js的轉(zhuǎn)折,團(tuán)隊當(dāng)時嘗試建立一個分析數(shù)據(jù)類型的產(chǎn)品,效能提升許多,開發(fā)人員的接受度也很高,在正式發(fā)布第一個對外的公開產(chǎn)品前,阿里巴巴內(nèi)部經(jīng)過許多較小規(guī)模的試驗,最後,確定沒問題之後,才正式推出「淘寶指數(shù)」,之後又陸續(xù)推出數(shù)據(jù)魔方等數(shù)據(jù)型產(chǎn)品。
采用Node.js開發(fā)可從全新的創(chuàng)新應(yīng)用著手
淘寶指數(shù)是全新的應(yīng)用,袁鋒表示,一開始用Node.js來開發(fā)適合從全新的應(yīng)用開始著手,「新手很容易就可以用Node.js寫出一個應(yīng)用!」他一語點出Node.js的優(yōu)點,由於Node.js擁有許多套件,開發(fā)功能的過程,可以省去不少時間,讓開發(fā)人員快速地從0到1打造出全新的應(yīng)用,因此,Node.js適合配合創(chuàng)新,快速開發(fā)新應(yīng)用。
一開始導(dǎo)入Node.js時,開發(fā)應(yīng)用的IT團(tuán)隊對Node.js都還不了解,過去只有用Python、Java和PHP建置應(yīng)用服務(wù)的經(jīng)驗,在團(tuán)隊IT人員初步研究過後,都覺得Node.js簡單易上手。
Node.js快速開發(fā)的優(yōu)勢,不只有利於前端的應(yīng)用,對於內(nèi)部開發(fā)人員的開發(fā)效率也有幫助,「Node.js對阿里巴巴而言,剛好是填補(bǔ)前端團(tuán)隊人力不足的問題,」袁鋒解釋,以往,開發(fā)人員在開發(fā)應(yīng)用的過程中,會用Java、Python等不同的語法,建立自己的開發(fā)工具,改用Node.js之後,開發(fā)人員在寫工具的效率上,大幅地提升,他認(rèn)為,Node.js讓IT團(tuán)隊有一個更好的合作模式,創(chuàng)造開發(fā)工具。
不過,他也坦言,當(dāng)初天真地認(rèn)為導(dǎo)入Node.js會是個簡單的工作,開始摸索之後,才發(fā)現(xiàn)困難重重,首先面臨的問題就是,Node.js如何融入阿里巴巴的原有Java生態(tài)系,袁鋒表示,當(dāng)初為了要寫Node.js,卻整天都在研究Java的程式碼,他采用hessian.js和java.io兩項序列化協(xié)議,來串接Node.js和Java,跨語言的開發(fā)他則建議使用序列化資料結(jié)構(gòu)方法Protocol Buffers。
技術(shù)瓶頸解決之後,還有另外一個問題,就是缺乏Node.js的工程師,「2011年時,Node.js還太新了!」他表示,當(dāng)時就連資深的人事都沒有聽過Node.js,要招聘工程師更是難上加難,這也是袁鋒當(dāng)初在CNode.org極力推動Node.js的原因,他認(rèn)為要主動創(chuàng)造一個環(huán)境,讓更多人可以投入這個生態(tài)圈。
阿里巴巴Node.js技術(shù)專家袁鋒表示,Node.js非常適合用於開發(fā)I/O密集型的應(yīng)用場景,不適合復(fù)雜且大型的應(yīng)用。
Node.js的局限是復(fù)雜且大型的應(yīng)用
袁鋒表示,Node.js適合快速打造出全新的應(yīng)用,相反地,Node.js的瓶頸點就是在產(chǎn)品發(fā)展的階段很適用,但并不是產(chǎn)品持續(xù)發(fā)展的優(yōu)先選項,依照他的觀察,創(chuàng)新業(yè)務(wù)里面,要從0到1用Node.js非常適合,但是要從1到100,就很難全用Node.js,他解釋,當(dāng)應(yīng)用慢慢壯大之後,必須切分成許多層,且業(yè)務(wù)邏輯會變得越來越復(fù)雜,而Node.js就不適合打造業(yè)務(wù)服務(wù)層。
舉例來說,用Java就可以很容易處理分散式交易,但是Node.js就很難實現(xiàn),因此,他建議,企業(yè)應(yīng)該想清楚系統(tǒng)架構(gòu)每一層工程師的分工和擅長的工具,找到適當(dāng)?shù)膱鼍,用對工具才是最重要的?/div>
袁鋒舉例,阿里巴巴在嘗試用Node.js打造全新的應(yīng)用後,也將目光轉(zhuǎn)向既有的應(yīng)用數(shù)據(jù)魔方,當(dāng)時該應(yīng)用流量持續(xù)上升,他預(yù)計原本的架構(gòu)將會無法招架,因此開始將原有的PHP架構(gòu)轉(zhuǎn)成Node.js,但是,他就將系統(tǒng)架構(gòu)分的很清楚,Node.js只負(fù)責(zé)應(yīng)用展示層所需要的功能。
阿里巴巴打造自家的Node.js效能監(jiān)測工具
由於阿里巴巴有許多流量大的應(yīng)用,在幾年前阿里巴巴預(yù)期將來會有許多用Node.js打造的應(yīng)用,可能會遇到和Java應(yīng)用一樣的問題,於是,從原本的數(shù)據(jù)單位拆出一個團(tuán)隊負(fù)責(zé)開發(fā)效能監(jiān)測工具Alinode。
他舉例,過去沒有效能監(jiān)測工具,發(fā)布新的程式碼時,CPU用量增加和記憶體的泄露問題,都無法準(zhǔn)確追蹤是哪一行程式碼導(dǎo)致的問題,同一個應(yīng)用發(fā)布兩個版本,CPU用量從15%增加到30%,開發(fā)人員只能找出可能有問題的程式碼來修改,再重新發(fā)布,若是CPU用量降下來,開發(fā)人員才可以確定是這行程式碼有問題。
袁鋒表示Google的開源JavaScript引擎V8所提供的監(jiān)測工具也無法百分之百準(zhǔn)確追蹤程式碼的問題,但是阿里巴巴開發(fā)的Alinode則是可以掌握8成以上的效能問題,可以自動提示某個函數(shù)使用的記憶體資源過多,也能直接顯示哪一個行數(shù)的程式碼需要修改。
袁鋒過去在CNode.org社群積極推動Node.js,剛開始只是為了創(chuàng)造Node.js生態(tài)圈,以利招募Node.js工程師,不過經(jīng)過許多年頭後,他還繼續(xù)堅持經(jīng)營社群,「有了這些交流,讓我們可以提前預(yù)防別的公司遇到的問題,」他表示,這是他認(rèn)為最大的意外收獲,因為大家會在社群中分享實際用Node.js遇到的問題,讓其他人可以在遇到問題之前事先預(yù)防,形成良性循環(huán)。
袁鋒曾經(jīng)以為Node.js是萬能的,慢慢地接觸到更多後端技術(shù)後,才發(fā)覺,應(yīng)該要想清楚每個開發(fā)框架的優(yōu)勢,善用它的優(yōu)勢提升研發(fā)效率,他表示,現(xiàn)在他花更多時間在思考如何提升開發(fā)效率,若有更好的方案,未來可能也不排除換成別種語言。
阿里巴巴為了要監(jiān)控Node.js系統(tǒng)的效能,自行開發(fā)一套效能監(jiān)控工具Alinode,可以追蹤C(jī)PU用量和記憶體泄漏問題。
【免責(zé)聲明】本文僅代表作者本人觀點,與CTI論壇無關(guān)。CTI論壇對文中陳述、觀點判斷保持中立,不對所包含內(nèi)容的準(zhǔn)確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,并請自行承擔(dān)全部責(zé)任。
相關(guān)閱讀:
- ·阿里云的領(lǐng)先之志2017-04-06 10:11:17
- ·阿里巴巴人工智能應(yīng)用的五部曲2016-10-17 16:07:04
- ·阿里巴巴正在把客服變成更加智能的“技術(shù)活兒”2016-09-29 10:46:16
- ·阿里巴巴集團(tuán)首席客戶服務(wù)官戴珊:客服不只是接接電話2016-09-27 13:50:01
- ·阿里首席客戶服務(wù)官:揭秘外人所不知道的客服團(tuán)隊2015-09-14 11:20:31
- ·從阿里巴巴安全技術(shù)競賽 看云安全發(fā)展趨勢2014-11-04 10:36:23
- ·阿里巴巴集團(tuán)CTO王堅:云計算讓理想平等2014-10-20 08:34:25
- ·聊天機(jī)器人進(jìn)入深耕應(yīng)用場景時,什么才是真正的殺手锏?2017-09-01 14:05:08
- ·想投資容器?那你得看看這個!2017-08-31 15:37:14
- ·【Genesys博客】打造客戶口碑的三大法寶2017-08-31 10:35:58