新浪微博侯青龍:新時(shí)代下的微博LNMP架構(gòu)
原創(chuàng)【51CTO.com原創(chuàng)稿件】就在上周,由51CTO主辦的WOTA全球架構(gòu)與運(yùn)維技術(shù)峰會(huì)在北京富力萬(wàn)麗酒店隆重召開(kāi)。本次WOTA設(shè)置了15大前沿?zé)狳c(diǎn)技術(shù)論壇,60+來(lái)自Google、LinkedIn、Airbnb、百度、阿里巴巴、騰訊、金山等海內(nèi)外一線(xiàn)互聯(lián)網(wǎng)公司的技術(shù)大咖帶來(lái)超過(guò)50個(gè)歷經(jīng)沉淀的架構(gòu)實(shí)戰(zhàn)心得與成功經(jīng)驗(yàn)分享案例,攜手打造歷時(shí)2天的行業(yè)***技術(shù)盛會(huì)。
在***天下午高可用架構(gòu)的A會(huì)場(chǎng),新浪微博主站研發(fā)負(fù)責(zé)人侯青龍發(fā)表了一場(chǎng)《新時(shí)代下的微博LNMP架構(gòu)》的演講。演講結(jié)束后,記者采訪(fǎng)了侯青龍,他與記者分享了他和新浪微博的技術(shù)團(tuán)隊(duì)關(guān)于新時(shí)代下的LNMP架構(gòu)的一些部署經(jīng)驗(yàn),以及在新時(shí)代中遇到的一些挑戰(zhàn)。此外他還從彈性角度介紹了新浪微博LNMP平臺(tái)在開(kāi)發(fā)時(shí)的思路和收獲。
用新的思路規(guī)避傳統(tǒng)架構(gòu)弊端
新浪微博作為一個(gè)重要的社交平臺(tái),經(jīng)常會(huì)遇到一些突發(fā)事件,海量轉(zhuǎn)發(fā)給服務(wù)架構(gòu)帶來(lái)極大的考驗(yàn)。傳統(tǒng)做法存在一些不足之處,例如傳統(tǒng)設(shè)備采購(gòu)申請(qǐng)周期長(zhǎng)、擴(kuò)縮容繁瑣、設(shè)備運(yùn)營(yíng)成本高。當(dāng)面臨流量壓力時(shí),常規(guī)做法是IT設(shè)備會(huì)做一部分冗余,但不能***冗余,畢竟還需要考慮到成本問(wèn)題。侯青龍以CPU為例,一般情況下,CPU利用率可能在20%~ 30%這個(gè)區(qū)間,是一種常態(tài),新浪內(nèi)部有要求,每臺(tái)服務(wù)器CPU要運(yùn)行到40%左右才不會(huì)被認(rèn)為是閑置。但如果CPU運(yùn)行到了60%,那技術(shù)團(tuán)隊(duì)可能就需要考慮擴(kuò)容。
面對(duì)流量壓力,還有一個(gè)常規(guī)做法是服務(wù)降級(jí),將那些不是很重要的功能模塊依次關(guān)閉,保證最主要功能運(yùn)行無(wú)虞。但是這樣做的弊端是,在最嚴(yán)重情況下,微博很多模塊不再顯示,用戶(hù)體驗(yàn)非常不好。
在這樣的情況下,新浪微博的技術(shù)團(tuán)隊(duì)開(kāi)始思索如何既降低設(shè)備運(yùn)營(yíng)成本,又能增強(qiáng)業(yè)務(wù)的彈性擴(kuò)容部署。侯青龍告訴記者,最終新浪微博選擇了基于混合云平臺(tái)的PHP彈性擴(kuò)容部署方案,搭建了DCP平臺(tái),既可以實(shí)現(xiàn)業(yè)務(wù)的彈性調(diào)度,基礎(chǔ)設(shè)施又可以跨云操作,非常好地解決了突發(fā)流量的問(wèn)題。
之前在會(huì)場(chǎng),有一位與會(huì)者問(wèn)了一個(gè)問(wèn)題:如果流量突然之間暴增,那么臨時(shí)去擴(kuò)容也存在一定時(shí)間差,這時(shí)該如何處理,確保服務(wù)無(wú)損?侯青龍表示這時(shí)候就需要去做提前預(yù)判。如果CPU在60%的運(yùn)營(yíng)狀態(tài)就處于危險(xiǎn)邊緣,那么在50%的時(shí)候就應(yīng)該提前去做擴(kuò)容處理,如果時(shí)間緊張,那就先進(jìn)行降級(jí)處理,因?yàn)槲覀兘导?jí)比較方便,后臺(tái)很多級(jí)只需要?jiǎng)觽€(gè)按鈕就可以完成,優(yōu)先去進(jìn)行一個(gè)降級(jí),等到擴(kuò)容完成立刻恢復(fù),盡量縮短降級(jí)的時(shí)間。
DCP的價(jià)值
那么,新浪的這個(gè)DCP平臺(tái)究竟是如何解決彈性擴(kuò)容和跨云問(wèn)題的呢?
侯青龍告訴記者,彈性擴(kuò)容是把所有環(huán)境差異通過(guò)容器化鏡像進(jìn)行打包,盡量讓底層主機(jī)變得透明。為什么要這么做呢?是因?yàn)橹安渴餚HP服務(wù)器還有Java服務(wù)器,各自操作系統(tǒng)的選擇和業(yè)務(wù)環(huán)境的部署差異非常大,即使處于冗余狀態(tài),也無(wú)法使用。但是通過(guò)DevOps Community化的技術(shù),把這些技術(shù)全部分流到鏡像中去,部署一模一樣的Docker引擎,當(dāng)新浪微博需要部署某個(gè)服務(wù)時(shí),可以快速地將鏡像下載下來(lái)并立即啟動(dòng)。
而基礎(chǔ)設(shè)施跨云,其實(shí)等于抹平了主機(jī)的差異,讓用戶(hù)不再關(guān)心擴(kuò)容需要多少服務(wù)器,減輕了過(guò)去在基礎(chǔ)設(shè)施環(huán)節(jié)的工作量。
在侯青龍看來(lái),DCP的價(jià)值在于把所有的行為在事前都以系統(tǒng)的方式組織起來(lái),當(dāng)需要去部署某一個(gè)服務(wù)或打包某個(gè)鏡像時(shí),都可以基于系統(tǒng)通過(guò)按鈕的方式快速完成,細(xì)節(jié)的東西完全做到了自動(dòng)化。
DCP帶來(lái)的另外一個(gè)明顯的好處是降低了運(yùn)維的難度,因?yàn)檫\(yùn)維人員不再需要精通技術(shù),只需要懂得操作系統(tǒng)就可以了,所有技術(shù)化的東西都已經(jīng)被隱藏在后端,前端呈現(xiàn)的就是自動(dòng)化的操作界面。
為什么選擇Docker?
侯青龍透露,其實(shí)以前他們也考慮過(guò)不用Docker技術(shù),用虛擬機(jī)來(lái)代替,新浪微博在做一個(gè)開(kāi)發(fā)機(jī)或者測(cè)試環(huán)節(jié)時(shí),實(shí)際上已經(jīng)有了一套純虛擬機(jī),完全可以直接使用。而如果基于Docker,那就意味著所有的接入方式必須以Docker方式接入。
但是***技術(shù)團(tuán)隊(duì)認(rèn)為,他們更希望新的服務(wù)架構(gòu)對(duì)于開(kāi)發(fā)的同事而言是沒(méi)有感知差異的,不希望內(nèi)部有兩套體系,因?yàn)橥粋€(gè)配置實(shí)際上可以部署到彈性擴(kuò)容平臺(tái),也可以部署到傳統(tǒng)的平臺(tái),沒(méi)有差異,所以最終選擇了Docker技術(shù)。
此外,新的服務(wù)架構(gòu)也遇到了一些難題。因?yàn)閺椥詳U(kuò)容時(shí)代碼隨時(shí)會(huì)刪,環(huán)節(jié)比較復(fù)雜,最穩(wěn)妥的做法是全量部署,但由于PHP代碼和Java代碼不一樣,Java代碼是本地打包完了以后,直接把那個(gè)打包文件推送就行。而PHP文件完全是散的,傳統(tǒng)方式是通過(guò)rsync去推送,但是Docker化之后,他們發(fā)現(xiàn),每次全量部署都需要重新推送,哪怕代碼只改動(dòng)了一個(gè)指令。后來(lái)經(jīng)過(guò)一些測(cè)試,他們發(fā)現(xiàn)鏡像部署特別好,1G的鏡像可能幾十秒鐘就下載完了,全量部署比想象中快很多。
經(jīng)驗(yàn)分享:如何讓架構(gòu)變得有彈性?
侯青龍介紹到,新浪微博的業(yè)務(wù)系統(tǒng)都是基于PHP開(kāi)發(fā),技術(shù)團(tuán)隊(duì)過(guò)去做鏡像、做優(yōu)化時(shí),大多都會(huì)進(jìn)行單獨(dú)部署,單獨(dú)做成一個(gè)鏡像。但當(dāng)遇到需要擴(kuò)容的時(shí)候,系統(tǒng)運(yùn)行的時(shí)間就變得非常慢。原因在于過(guò)去編輯鏡像的時(shí)候,技術(shù)人員會(huì)針對(duì)每一個(gè)鏡像做一個(gè)打包,相當(dāng)于每個(gè)鏡像都包含一個(gè)操作系統(tǒng),假設(shè)一個(gè)操作系統(tǒng)600兆大小,那么即便是鏡像安裝100兆大小的PHP加起來(lái)也有700兆,下載特別慢。
后來(lái)他們把這個(gè)鏡像打成鏡像包,所有的組件都共用一個(gè)操作系統(tǒng),大小被壓縮了好多,下載速度也更快。這樣部署新系統(tǒng)功能時(shí),以前可能要半個(gè)小時(shí),現(xiàn)在只需幾分鐘就搞定。
在采訪(fǎng)結(jié)束時(shí),記者詢(xún)問(wèn)侯青龍對(duì)于服務(wù)架構(gòu)未來(lái)發(fā)展趨勢(shì)的一個(gè)預(yù)測(cè),他表示,從宏觀角度看,當(dāng)企業(yè)在發(fā)展初期時(shí),服務(wù)架構(gòu)的宗旨就是怎么方便怎么做,但是當(dāng)企業(yè)已經(jīng)具備了一定規(guī)模,這時(shí)候服務(wù)架構(gòu)就需要去考慮如何用工具解決所有問(wèn)題,盡量用自動(dòng)化的角度解決問(wèn)題,這是他的經(jīng)驗(yàn)分享,希望能夠?qū)Υ蠹矣兴鶐椭?/p>
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文作者和出處為51CTO.com】