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