亚洲综合伊人,成人欧美一区二区三区视频不卡,欧美日韩在线高清,日韩国产午夜一区二区三区,大胆美女艺术,一级毛片毛片**毛片毛片,你瞅啥图片

您當(dāng)前的位置是:  首頁(yè) > 新聞 > 文章精選 >
 首頁(yè) > 新聞 > 文章精選 >

阿里巴巴Node.js技術(shù)專(zhuān)家袁鋒揭露后端效能關(guān)鍵

--億級(jí)交易平臺(tái)效能關(guān)鍵大公開(kāi)

2017-09-04 14:09:08   作者:   來(lái)源:CTI論壇   評(píng)論:0  點(diǎn)擊:


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

專(zhuān)題

双鸭山市| 陆川县| 文化| 静安区| 桃园县| 淳化县| 嵊泗县| 惠东县| 万安县| 五台县| 绥滨县| 安国市| 化德县| 乌苏市| 宜宾市| 疏勒县| 海淀区| 和林格尔县| 青铜峡市| 宜川县| 邓州市| 红安县| 迁安市| 巴东县| 金乡县| 马公市| 鄂尔多斯市| 普洱| 铁力市| 武宁县| 日喀则市| 曲阳县| 阜南县| 靖远县| 新营市| 平凉市| 凌云县| 拉萨市| 上饶县| 新兴县| 河池市|