打造一款億級應(yīng)用你會(huì)碰到哪些問題?

0 評論 15488 瀏覽 1 收藏 17 分鐘

餓了么原來有一個(gè)機(jī)房,差不多有兩三百臺機(jī)器。但是每個(gè)月的業(yè)務(wù)都在漲,所以運(yùn)維部門很頭疼,每個(gè)月都要采購設(shè)備、上架設(shè)備。機(jī)房滿了再部署一個(gè)機(jī)房,整個(gè)周期又很強(qiáng),最后不得已把服務(wù)部署在云機(jī)房。

上周,騰訊云舉 辦了“最強(qiáng)應(yīng)用,由你智造”的沙龍活動(dòng)。 騰訊云的商務(wù)合作負(fù)責(zé)人王志永表示,騰訊云開始做應(yīng)用的時(shí)候,有許多血的教訓(xùn)。尤其是服務(wù)的微信、QQ空間、還有手Q這種過億級的應(yīng)用,踩過很多坑,有很 多血和淚的教訓(xùn)。這次是希望把經(jīng)驗(yàn)分享出來,一來是讓創(chuàng)業(yè)者和互聯(lián)網(wǎng)公司少走些彎路,二來希望以此吸引更多的客戶。

騰訊云研發(fā)總監(jiān)鄭立峰:打造一款億級應(yīng)用會(huì)碰到什么問題?

每年應(yīng)用數(shù)都在不斷地增長。我前兩天向我們開放平臺的同事要了一個(gè)數(shù)據(jù),注冊的開發(fā)者有一兩百萬,然后活躍的開發(fā)者,也就是一個(gè)月內(nèi)還在經(jīng)常地不斷上傳應(yīng)用的這些的廠商,也有達(dá)到了20多萬。由此可見,整個(gè)行業(yè)新的應(yīng)用是非常非常多的。

那么大家在創(chuàng)業(yè)的過程當(dāng)中,也遇到了各種各樣的挑戰(zhàn)。有產(chǎn)品上的挑戰(zhàn),產(chǎn)品同質(zhì)化,然后流量成本也很高,大家可能要去各個(gè)電子市場買流量。然后運(yùn)營成本也很高,比如說你去拉一個(gè)新用戶,新用戶的成本是越來越高。技術(shù)上的挑戰(zhàn),往往會(huì)被忽視。

問題一:流量突然暴增,擴(kuò)展性不足

有一家客戶,他在一周內(nèi)流量暴漲,連自己都沒有想到在一周內(nèi)從一個(gè)基本上沒有什么人用的應(yīng)用,突然變成了全國人民都非常喜愛用的一個(gè)應(yīng)用。然后一周 內(nèi)dau就突破了兩百萬。他們的服務(wù)器可能就幾臺,他們的程序員可能就幾個(gè)人。那么面對著突然到來的流量暴增,技術(shù)人員壓力非常大。

我去訪談的時(shí)候我坐在他們旁邊,跟技術(shù)人員去聊,他說我都好幾天沒有睡覺了,然后因?yàn)榱髁勘q所帶來的各種各樣的技術(shù)問題,在一兩天里面集中地爆發(fā)出來,流量暴漲、程序的bug,被無數(shù)人使用之后各種程序bug也會(huì)出來。那么性能問題、架構(gòu)可擴(kuò)展性問題等等的暴露出來了。

我把第一個(gè)問題列成是業(yè)務(wù)訪問短時(shí)間內(nèi)暴漲、技術(shù)架構(gòu)彈性不足,導(dǎo)致服務(wù)器壓跨。一個(gè)是說高性能的設(shè)計(jì)不足,另外是擴(kuò)展性不足。還有就算擴(kuò)展性是足 的,那么幾天里面的流量暴漲,面臨的一個(gè)問題是說我采購服務(wù)器也沒有那么快。按照我們常規(guī)的采購服務(wù)器的流程的話,可能我去買服務(wù)器、下單,就算按照快 的,我在中關(guān)村里面去買一個(gè)服務(wù)器、下單,等把它能夠上架可能也需要幾天工夫,但是在這幾天里面已經(jīng)是擋不住了。

另外一個(gè)情況,還有一類企業(yè)是這樣的。就是每個(gè)月的訪問數(shù)據(jù)都在漲,也就是說每個(gè)月都漲dau漲個(gè)10萬。然后這樣的一些公司的運(yùn)維的同事也很苦 逼,每個(gè)月都在采購設(shè)備、上架設(shè)備,采購設(shè)備、然后上架設(shè)備,不斷地做著重復(fù)性的勞動(dòng)。這樣的勞動(dòng)對他來說,一方面是感受到公司快速發(fā)展帶來的喜悅,另外 一方面也是在不斷地重復(fù)性的勞動(dòng),他本身的自我的價(jià)值認(rèn)知是不高的,因?yàn)橐恢痹谧鲞@樣的一些事情。

解決辦法:部署高質(zhì)量的云主機(jī)

高質(zhì)量的云主機(jī)。云的一個(gè)普遍的特性,就是鼠標(biāo)點(diǎn)幾下、機(jī)器就拿到了??赡苁?00臺,也可能是1000臺。這樣對于移動(dòng)應(yīng)用的好處不言而喻。你的業(yè)務(wù)量漲了,你馬上可以把機(jī)器部署出來,為了達(dá)到快速部署,我們有一個(gè)鏡像的能力。比如說你是web服務(wù)的話,我可以把第一臺的web而做個(gè)鏡像,然后買一百臺機(jī)器,然后一百臺快速的進(jìn)行部署,整個(gè)部署的速度也是非常快的。

“餓了么”的實(shí)例,它原來有一個(gè)機(jī)房,差不多有兩三百臺機(jī)器吧。但是每個(gè)月的業(yè)務(wù)都在漲,所以運(yùn)維部門很頭疼,就像我剛才說的每個(gè)月都要采購設(shè)備、 上架設(shè)備。然后那個(gè)機(jī)房容量還有限,可能快滿了。那再部署一個(gè)機(jī)房,整個(gè)周期又很強(qiáng),所以我們跟他說,你把服務(wù)部署在騰訊云機(jī)房吧,我們第一可以給你非常 高的安全防護(hù),第二我們的性能又非常好。在這樣一種情況下,兩個(gè)機(jī)房如何打通,我們建設(shè)了一個(gè)VPN,是一條加密的隧道,那么從它的自有的機(jī)房能夠同步到 我們騰訊云的機(jī)房,通過數(shù)據(jù)庫同步,把數(shù)據(jù)同步過來。

實(shí)際的情況呢,從北京的機(jī)房到我們上海的云機(jī)房,通過VPN打通之后,數(shù)據(jù)庫的延時(shí)是60毫秒,遠(yuǎn)遠(yuǎn)超出大家對這個(gè)事情的預(yù)期。

問題二:安全問題,總有幾個(gè)“友商”不太喜歡你的應(yīng)用

社會(huì)很大,總有幾個(gè)廠商不太喜歡你們的應(yīng)用。那么這樣的情況下,DDOS的攻擊,目前的情況來看是越來越頻繁地在出現(xiàn),而且花樣也越來越多。以前說的最多的是DDOS攻擊,現(xiàn)在CC攻擊、主機(jī)入侵、木馬植入這種情況越來越多。

還有新的一種情況,在我們O2O里面是比較明顯的,就是O2O的這些信息平臺都很關(guān)注它的上面的商家的信息。那么同類應(yīng)用出來的時(shí)候,總是想把這樣的商家的信息給扒過來,這樣的情況對于O2O的應(yīng)用來說也是不太能忍,他們也會(huì)來求助我們有沒有防扒的一些手段。

還有安全防護(hù)。尤其舉辦重大活動(dòng)的時(shí)候,比如說餓了么要舉行一個(gè)美食街,舉辦重大活動(dòng)的時(shí)候被攻擊、被打趴下,那這個(gè)業(yè)務(wù)基本上沒有辦法干了。

在安全層,騰訊云有全方位的安全防護(hù)體系——宙斯盾+大禹、洋蔥、WAF防護(hù)。

“宙斯盾”是安全防護(hù)非常重要的一個(gè)組件,騰訊所有自己的業(yè)務(wù)也都在用這個(gè)服務(wù)。它有幾個(gè)特性,當(dāng)有用戶打擊你,對你這個(gè)應(yīng)用進(jìn)行攻擊的時(shí)候,這個(gè) “宙斯盾”會(huì)在幾秒內(nèi)探測出來,馬上開啟防御,幾秒就開啟防御了。然后它會(huì)把攻擊流量轉(zhuǎn)移到另外一個(gè)地方去,進(jìn)行流量清洗,以保證正常的流量能夠正常的進(jìn) 來,大概是這樣的。

它整個(gè)的反應(yīng)是很快的。剛開始也沒有這么快,我們已經(jīng)打磨挺長時(shí)間了,現(xiàn)在可以做到幾秒內(nèi)馬上就可以進(jìn)行響應(yīng)。前陣子,有一次大的攻擊,是500G 流量,對我們的一個(gè)機(jī)房進(jìn)行攻擊,它快速作出了響應(yīng),幾秒內(nèi)就把攻擊流量轉(zhuǎn)移到另外的一個(gè)地方去了。那么其他的流量都能夠正常進(jìn)來,我們所有的業(yè)務(wù)都能夠 正常的去運(yùn)作。像這樣一個(gè)問題,如果說你不是放在云機(jī)房的話,可能碰到這樣的情況還是挺棘手的。

自己去應(yīng)對、去解決這樣的一個(gè)問題是非常棘手的。我們也碰到很多客戶,也包括游戲的客戶,也包括應(yīng)用的客戶,那會(huì)被打的開不了門,一下子就被打趴下 了,這樣的話其實(shí)業(yè)務(wù)就沒有辦法正常開展了。那騰訊對安全一直向來都非常重視,我們的QQ業(yè)務(wù)也在用它,我們的微信業(yè)務(wù)也在用它。

“大禹”,“大禹”這個(gè)防御體系跟“宙斯盾”有點(diǎn)不太一樣。“宙斯盾”是在機(jī)房前頭加了一個(gè)防御盾,誰來打我,我就把流量干掉。那么“大禹”是說我在全國有400多個(gè)接入點(diǎn),我在域名解析的時(shí)候就是就近解析到某一個(gè)節(jié)點(diǎn)去的。那么再通過那些節(jié)點(diǎn)再到我們的云機(jī)房。

當(dāng)有用戶來打擊的時(shí)候,域名解析、我可能把它解析到某個(gè)OC節(jié)點(diǎn)上,它打趴下一個(gè)節(jié)點(diǎn),我其他的節(jié)點(diǎn)都還是正常的。它打趴下哪一個(gè)節(jié)點(diǎn)都沒有關(guān)系。那么我們這套的“大禹”的分布式的防御系統(tǒng),最高可以支持2T的DDOS攻擊,所以這個(gè)容量已經(jīng)是非常高了。

騰訊云工程師蔡璞:從35萬到600萬訂單,滴滴打車差點(diǎn)崩潰

2014年,移動(dòng)應(yīng)用排行榜上排名前10個(gè)APP幾乎都是BAT的,但是這個(gè)原因肯定有很多。其中一個(gè)很重要的原因,就是BAT在這么多年長期的運(yùn)營積累的海量運(yùn)營的經(jīng)驗(yàn),為他們旗下的這些APP是添上了翅膀。

那么日訂單35萬的APP和日訂單600萬的APP應(yīng)用有什么區(qū)別?大家知道APP應(yīng)用其實(shí)是客戶端和服務(wù)器端共同來完成的功能。那么對于客戶端來 說,可能就是一些界面進(jìn)行優(yōu)化,然后功能有些疊加。但是在服務(wù)器端,那就真的是要做到性能、架構(gòu)有質(zhì)的提升,上的不是一個(gè)臺階,可能是很多個(gè)臺階。

今天要講的從35萬到600萬訂單的應(yīng)用其實(shí)就是滴滴打車。

滴滴打車,2014年和快的死磕的時(shí)候,其實(shí)拼的、燒的是錢。但是拼的是他們的后臺的服務(wù)器。當(dāng)時(shí)的情況就是誰扛不住、那誰就輸了。

滴滴打車,目前2014年全國使用滴滴打車的用戶超過1億,那2014年平安夜單日全國用滴滴打車出行人數(shù)超過了3000萬人。對比2013年,滴 滴打車月活躍用戶增長了600多倍,而打車成功率是高于90%。這個(gè)數(shù)字看起來是很客觀的。但是現(xiàn)在滴滴打車在騰訊云上的架構(gòu),我們是評估過的,日訂單量 再翻一倍也是沒有問題的,我們能扛住的。

那么這種架構(gòu)是怎么實(shí)現(xiàn)出來的,羅馬不是一天建成的,但是滴滴打車這種架構(gòu)也不是一下子就做成了的。

2014年初,騰訊云開始和滴滴打車接觸。騰訊云開始接觸滴滴打車的時(shí)候,滴滴打車當(dāng)時(shí)是流量上去了,但是用戶體驗(yàn)是快速下降了的。這個(gè)反映就是在 用戶下單的時(shí)候下不了單,司機(jī)搶不到單,然后這個(gè)應(yīng)用可能就會(huì)出現(xiàn)整個(gè)應(yīng)用就卡在那里,或者是干脆用戶就關(guān)掉、退出。這么差的用戶體驗(yàn)的根本原因就是它的 后臺架構(gòu)上的問題,它的后臺當(dāng)時(shí)已經(jīng)扛不住了。

比如說出現(xiàn)個(gè)LVS單機(jī)故障,也就是單點(diǎn),整個(gè)一個(gè)系統(tǒng)的關(guān)鍵節(jié)點(diǎn)出現(xiàn)問題,一個(gè)主件掛掉、那么整個(gè)路徑就全部掛掉。還有一個(gè)就是存儲系統(tǒng)的故障, 然后還有網(wǎng)絡(luò)故障,交換機(jī)流量滿了。因?yàn)楫?dāng)時(shí)不是BGPIP的,所以說在不是BGPIP的,在跨網(wǎng)、跨運(yùn)營商的時(shí)候,在流量高的時(shí)候就會(huì)出現(xiàn)丟包率高、延 時(shí)高,用戶體驗(yàn)就下降了。

還有一個(gè)就是Webserver扛不住,他們當(dāng)時(shí)Webserver用了很多,有狀態(tài)的,就導(dǎo)致它需要擴(kuò)容的時(shí)候根本沒有短期內(nèi)把它擴(kuò)上去,就機(jī)器都加不上去。還有就是Mysql扛不住,鏈接數(shù)上限這些問題。

滴滴打車是有三個(gè)主要的問題,一個(gè)是用戶的下單,第二個(gè)是司機(jī)搶單,第三個(gè)就是系統(tǒng)分單。其中用戶下單的時(shí)候,用戶下了單會(huì)不停地看這個(gè)單的情況, 而司機(jī)搶單的時(shí)候,他搶了單會(huì)不停地上報(bào)他的坐標(biāo),還有就是系統(tǒng)分單、它會(huì)有很大的計(jì)算量來匹配司機(jī)和用戶。所有的應(yīng)用的關(guān)鍵點(diǎn)都落實(shí)到他們的數(shù)據(jù)上,都 是到Mysql上面來。所有的大量的數(shù)據(jù)讀取,都是他們的Mysql來扛。當(dāng)訂單量大的時(shí)候就扛不下去了,很多的應(yīng)用最后就卡在數(shù)據(jù)庫這里了。

對于這些問題,騰訊云給出了解決方案。LVS大家都很熟了,就是對于這種開源軟件,創(chuàng)業(yè)者其實(shí)很喜歡用,非常簡單,方便快捷地部署起來就能用。但是 開源軟件有個(gè)問題,就是當(dāng)上量商業(yè)化之后,會(huì)出現(xiàn)很多你意想不到的奇奇怪怪的問題出來,那么沒法解決的,這不是說寫開源軟件的一些大牛們沒法解決這些問 題,說是他當(dāng)時(shí)寫這些開源軟件的時(shí)候,他都不知道當(dāng)你的量上去之后會(huì)有這么復(fù)雜的情況需要你來處理。

騰訊,其實(shí)也是經(jīng)歷了從開源軟件的這種過程過來的。我們以前也用過LVS,現(xiàn)在發(fā)展到了我們自己的外網(wǎng)負(fù)載更換系統(tǒng),我們內(nèi)部叫TGW,它是多個(gè)集 群來組成的,而每個(gè)集群目前標(biāo)配是4臺機(jī)器,但是這4臺是可擴(kuò)容的。就是說這個(gè)集群里的單機(jī)的pps可以達(dá)到120萬,但是我們通常到80萬的時(shí)候就開始 進(jìn)行擴(kuò)容了,就跑到120萬,集群鏈接數(shù)可以到1.2個(gè)億。

還有就是騰訊云有百G出口帶寬,它有BGPIP,那么就解決了跨網(wǎng)、跨容量、跨運(yùn)營商的網(wǎng)絡(luò)之間的這種問題。

分系統(tǒng)解耦,其實(shí)這就是解決你有機(jī)器、你架不上去的這些問題,來讓你的設(shè)備、你的系統(tǒng)能夠平行的擴(kuò)。

Nosql高速緩存,把它的那些常用的熱數(shù)據(jù)用Mysql這種可以高并發(fā)的、內(nèi)存很快的速度來把它扛下來。

高性能的CDB。其實(shí)高性能的CDB,目前就是我前兩天和我們做數(shù)據(jù)庫的總監(jiān)談過一次,他說我們現(xiàn)在測出來的我們實(shí)際的高性能CBD馬上推出來,可以到4W+qps。

最后就是機(jī)房保障。

騰訊在這么多年的海量運(yùn)營過程中,其實(shí)是積累了一套很完善的機(jī)房建設(shè)標(biāo)準(zhǔn)的,只要你的業(yè)務(wù)放在騰訊云上面,要么你的機(jī)房保障,其實(shí)是和QQ、微信這些應(yīng)用的機(jī)房保障條件是完全一樣的。

來源:鈦媒體?? 作者:

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發(fā)揮!