蔡超,Mobvista技術(shù)副總裁兼首席架構(gòu)師
以下為蔡超所作的《云端儉省之道》演講分享。
——————
Mobvista的宗旨是“建立覆蓋全球每一個人的信息輸送管道”,公司建立了覆蓋全球的移動營銷平臺,通過平臺助力移動開發(fā)者利用全球優(yōu)質(zhì)廣告資源來實現(xiàn)高效的流量變現(xiàn),同時幫助廣告主利用全球優(yōu)質(zhì)流量資源實現(xiàn)廣告的精準(zhǔn)投放。
從一開始,Mobvista就考慮到業(yè)務(wù)的快速啟動、規(guī)模的快速擴(kuò)展及全球化,所以我們的整個系統(tǒng)和平臺都建立在云端。
Mobvista成立于2013年,經(jīng)過短短幾年的發(fā)展時間,我們已經(jīng)成為全球前十的移動營銷平臺,我們的日觸達(dá)用戶已達(dá)9億,日均的請求數(shù)量目前已經(jīng)接近400億。
如同每一個在云端搭建大規(guī)模系統(tǒng)的公司一樣,規(guī)模的快速增長,帶來的是成本的快速增長的壓力。這也是為什么我加入到Mobvista,如果你參加了去年的ArchSummit2017,那你會知道我去年是代表亞馬遜來做一些session的分享的。
在這半年的時間里面,我們通過架構(gòu)的優(yōu)化,以及利用AWS的一些新技術(shù)來逐漸降低我們的成本,通過半年的優(yōu)化,我們實現(xiàn)了單位請求的成本降低了約60%,這是一個非常難以置信的結(jié)果。那下面,我會分享一些我們自己的實踐,供大家參考。
第一個非常重要的,就是在你的架構(gòu)層面實現(xiàn)更細(xì)粒度的伸縮,以往的單體系統(tǒng)在伸縮的時候我們是通過兩種方式,第一種是復(fù)制系統(tǒng)服務(wù),第二就是對數(shù)據(jù)進(jìn)行分片。通常情況下系統(tǒng)的瓶頸不會是在于系統(tǒng)的所有方法,往往只是在于某一個方法,那這樣的方式由于會導(dǎo)致整個系統(tǒng)的復(fù)制使用更大的硬件資源,導(dǎo)致一些硬件資源的浪費(fèi),那如果你采用微服務(wù)的話,你可以實現(xiàn)更細(xì)粒度的伸縮,那么對于處于瓶頸狀態(tài)的微服務(wù)進(jìn)行單獨(dú)的伸縮、單獨(dú)的復(fù)制,對它所使用的數(shù)據(jù)進(jìn)行分片,提高硬件的使用效率。
另一方面,利用AWS?Lambda技術(shù),你可以直接將計算方法或業(yè)務(wù)方法上傳至云端,直接進(jìn)行計算或運(yùn)行,而無需考慮其承載器的硬件以及擴(kuò)充硬件的規(guī)模。AWS?Lambda將根據(jù)請求量變化實現(xiàn)自動伸縮。同時,使用AWS提供的Backend?Service,例如存儲、步驟編排(data?pipeline)等,你可以完整地構(gòu)建一個Serverlessarchitecture。
上圖是我們的一個游戲數(shù)據(jù)統(tǒng)計系統(tǒng),這個游戲數(shù)據(jù)統(tǒng)計系統(tǒng)也是覆蓋全球。我們可以看一下,整體的架構(gòu)中沒有任何一臺主機(jī)。Serverless不僅降低了系統(tǒng)的硬件成本,更加降低了硬件的維護(hù)成本(關(guān)于這方面更多的分享,歡迎大家參加下午我的同事梁曉鵬——公司資深工程師的一個關(guān)于Serverless的session。)
第二,就是充分利用AWS的收費(fèi)模式。AWS推出了Spot?Instance,這是一種閑置的EC2Instance,通常你可以以1-1.5折的價格來獲取Spot?Instance,但是在某些資源緊張的情況下以及在你的競價低于市場價的情況下,這些Instance會被回收掉。如果你的應(yīng)用可以實現(xiàn)InstanceFlexible、同時你精巧的設(shè)計還可以滿足到以上這些容錯特性,那么你可以結(jié)合AutoScaling以及混合一部分的OnDemand和Reserved?Instance來實現(xiàn)一個可靠并且低成本的系統(tǒng)。
不僅是Online系統(tǒng),對于后臺的大數(shù)據(jù)平臺,如果是使用AWS?EMR平臺,你同樣可以利用?SpotInstance來降低你的成本。我們可以用SpotInstance來運(yùn)行TaskNode,TaskNode在失效時,EMR平臺會對它進(jìn)行重新運(yùn)行。與Master?Node和Core?Node不同的是,TaskNode的失效并不會引起整個EMR平臺的失效,也不會像引起很大的data?shuffle.?所以我們可以安全地用SpotInstance來替換所有的Task?Node.?唯一的問題是,如果應(yīng)TaskNode被回收,而Task需要從算,就會需要更多的時間。這時,你可以借助更多的Spot?Instance,利用更多的Task?Node來加快整體的運(yùn)行速度,比如說4個小時的運(yùn)行時間,通過更多的Task?Node把它加快到1小時運(yùn)行,即因為一次從而導(dǎo)致需要2個小時,那么你在時間和成本上還是獲得了改善。
我們一直都在提什么樣的架構(gòu)是好的軟件架構(gòu),開發(fā)人員大都會想到:可伸縮、高可靠、可擴(kuò)展、可復(fù)用、可維護(hù)。而實際上,在我做架構(gòu)師的十多年經(jīng)歷當(dāng)中,我發(fā)現(xiàn)其實除了以上這些一個讓企業(yè)支付得起、并且能夠讓企業(yè)獲得更高利潤的架構(gòu),才是一個好架構(gòu)。