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