微信產(chǎn)品經(jīng)理和架構(gòu)師們是靠什么扛住了10億個(gè)紅包?
Nancy導(dǎo)讀:微信這么大的流量,尤其是瞬間的峰值,對(duì)于任何團(tuán)隊(duì)和架構(gòu)師都是一個(gè)極大的挑戰(zhàn),我們也在想,微信團(tuán)隊(duì)會(huì)用什么樣的辦法扛住了搶紅包的流量?
? 微信這么大的流量,尤其是瞬間的峰值,對(duì)于任何團(tuán)隊(duì)和架構(gòu)師都是一個(gè)極大的挑戰(zhàn),我們也在想,微信團(tuán)隊(duì)會(huì)用什么樣的辦法扛住了搶紅包的流量,正巧今天騰訊大講堂的公共賬號(hào)就分發(fā)出了這篇文章,盡管沒(méi)有從具體的技術(shù)細(xì)節(jié)上介紹,但在宏觀策略上還是相當(dāng)?shù)赜袑W(xué)習(xí)的價(jià)值,分享給大家。 ?400倍的挑戰(zhàn) 今年微信紅包方式與去年用戶與用戶之間互發(fā)紅包相比,搖紅包的方式對(duì)業(yè)務(wù)量來(lái)說(shuō)是一個(gè)極大的爆發(fā),光是除夕10:30送出的一波紅包就達(dá)到了1.2億個(gè),已經(jīng)是2014年除夕夜峰值的400倍之巨(2014年峰值每分鐘被拆開紅包數(shù)量?jī)H2.5W個(gè))! 進(jìn)入搶紅包環(huán)節(jié),后臺(tái)數(shù)據(jù)瞬間飆升 ?發(fā)10億紅包,難在哪里? 微信團(tuán)隊(duì)總結(jié)下來(lái)有三大難點(diǎn): ? 快——如何保證用戶快速搖到紅包? ? 準(zhǔn)——如何保證搖到的紅包能成功拆開? ? 穩(wěn)——如何保證拆開的紅包能分享出去? 大量用戶在同一時(shí)間搖紅包,瞬間產(chǎn)生每秒千萬(wàn)級(jí)的請(qǐng)求,這個(gè)量級(jí)的請(qǐng)求如果不加以疏導(dǎo)處理直接到達(dá)后臺(tái),必定會(huì)導(dǎo)致后端服務(wù)過(guò)載甚至崩潰。上文中除夕當(dāng)天后臺(tái)監(jiān)控?cái)?shù)據(jù)曲線便能說(shuō)明一切——在前臺(tái)重重的分流減壓下,后臺(tái)服務(wù)器負(fù)載仍然瞬間飆升十倍以上。 ? 三大應(yīng)對(duì)策略齊上陣 對(duì)于以上三個(gè)難點(diǎn),微信后臺(tái)開發(fā)團(tuán)隊(duì)主要通過(guò)三大應(yīng)對(duì)策略應(yīng)對(duì):有損服務(wù),柔性可用,大系統(tǒng)小做 什么是有損服務(wù)?有損服務(wù)是通過(guò)精心拆分產(chǎn)品流程,選擇性犧牲一部分?jǐn)?shù)據(jù)一致性和完整性從而保證核心功能絕大多數(shù)運(yùn)行。這是騰訊在PC時(shí)代積累下來(lái)的一種特色運(yùn)營(yíng)策略——在資源一定的前提下,互聯(lián)網(wǎng)條件千變?nèi)f化的場(chǎng)景中,量力而為,滿足用戶的核心需求。 微信紅包的核心點(diǎn)是搖,拆,分享紅包,整個(gè)系統(tǒng)設(shè)計(jì)時(shí)必須盡最大可能保證這三個(gè)步驟一氣呵成,任何關(guān)聯(lián)系統(tǒng)出現(xiàn)異常的時(shí)候馬上進(jìn)行系統(tǒng)降級(jí),防止引起系統(tǒng)雪崩。 系統(tǒng)降級(jí)可以分為兩個(gè)方面,一是把核心功能進(jìn)行分拆和簡(jiǎn)化,通過(guò)輔助輕量化的服務(wù)實(shí)現(xiàn),確保最短關(guān)鍵路徑的可行,比方說(shuō)在接入層置入搖紅包邏輯,將每秒千萬(wàn)級(jí)請(qǐng)求轉(zhuǎn)化為每秒萬(wàn)級(jí)的紅包請(qǐng)求,再傳到紅包服務(wù)的后端邏輯,降低雪崩的可能性。 點(diǎn)評(píng):有損服務(wù)就是讓重要的事情先做,重要的人物先行。這在現(xiàn)實(shí)中也很常見(jiàn),軍人買票優(yōu)先,領(lǐng)導(dǎo)視察封路,讓領(lǐng)導(dǎo)車先行,我等小民等待也是這個(gè)路子。 同時(shí)后端采用異步分拆,接收到用戶請(qǐng)求時(shí)僅進(jìn)行合法性驗(yàn)證,驗(yàn)證完成后直接告知成功,后續(xù)業(yè)務(wù)邏輯進(jìn)入異步隊(duì)列進(jìn)行處理,減少了用戶的等待時(shí)間,也極大降低了峰值雪崩的概率。 耗時(shí)最長(zhǎng)的入賬操作,直接跳過(guò),異步處理 另外一方面是采取過(guò)載保護(hù)措施: 微信紅包的過(guò)載保護(hù)在客戶端已提前預(yù)埋了策略,在連接失敗或超時(shí)情況下會(huì)有相應(yīng)提示,減少用戶重復(fù)請(qǐng)求次數(shù)。接入層面也會(huì)進(jìn)行自我保護(hù),針對(duì)頻繁發(fā)出請(qǐng)求的客戶端限制響應(yīng)速度,并對(duì)系統(tǒng)負(fù)載劃分出若干等級(jí),達(dá)到不同閾值時(shí)引導(dǎo)客戶端使用不同限速速率;在異常情況出現(xiàn)時(shí),采取減少紅包數(shù),異步限流降低拆/分享紅包的速率等措施減輕服務(wù)器端壓力;與此同時(shí),微信紅包還有全程壓測(cè)流程,對(duì)整個(gè)業(yè)務(wù)鏈接進(jìn)行自動(dòng)提前評(píng)估,防止過(guò)載。 點(diǎn)評(píng):在前端擋住對(duì)后端流量的進(jìn)入,比如出現(xiàn)通信失敗時(shí),當(dāng)前這個(gè)用戶,對(duì)后臺(tái)已經(jīng)不會(huì)有什么壓力了。 這畫面你可能沒(méi)見(jiàn)過(guò),它其實(shí)早已在手機(jī)待命 在有損服務(wù)思想的重重保護(hù)下,第一波的搖紅包體驗(yàn)活動(dòng)中,微信紅包幾乎滿分通過(guò)考驗(yàn),其中過(guò)載保護(hù)的作用相當(dāng)明顯,在客戶端、接入層層減壓、過(guò)濾,最終僅把十萬(wàn)級(jí)壓力傳遞到后臺(tái)。 柔性可用是在有損服務(wù)價(jià)值觀支持下的方法,重點(diǎn)在于實(shí)際上會(huì)結(jié)合用戶使用場(chǎng)景,根據(jù)資源消耗,調(diào)整產(chǎn)品策略,設(shè)計(jì)幾個(gè)級(jí)別不同的用戶體驗(yàn)場(chǎng)景,保證盡可能成功返回關(guān)鍵數(shù)據(jù),并正常接受請(qǐng)求,絕不輕易倒下。 柔性服務(wù)更具有產(chǎn)品的思維性質(zhì),意義在于深刻理解產(chǎn)品每一個(gè)場(chǎng)景的核心價(jià)值,把握用戶在每一個(gè)場(chǎng)景中的核心需求,設(shè)計(jì)不同層次的滿足核心訴求的辦法,對(duì)柔性服務(wù)在微信紅包中的實(shí)踐,紅包團(tuán)隊(duì)也有相應(yīng)的措施,主要可以分為幾大類。 ? 1、系統(tǒng)容災(zāi):面對(duì)大規(guī)模的請(qǐng)求量,系統(tǒng)容災(zāi)必不可少,容災(zāi)一般可分為邏輯層容災(zāi)和數(shù)據(jù)層容災(zāi),這次微信后臺(tái)開發(fā)團(tuán)隊(duì)在容災(zāi)布置中采用30%切換的邏輯層方案,即核心服務(wù)都能做到最多1/3服務(wù)器出問(wèn)題的情況下自動(dòng)容災(zāi)切換以保證服務(wù)質(zhì)量,提高預(yù)警級(jí)別換取系統(tǒng)的可用性。 ? 2、資源隔離:顧名思義就是把資源進(jìn)行隔離減少服務(wù)支路間的影響,從邏輯入手,在資源邏輯中,當(dāng)A服務(wù)同時(shí)分派任務(wù)給BC服務(wù)時(shí),設(shè)定單個(gè)最大分配上限值,避免任意一個(gè)支路出問(wèn)題影響整個(gè)服務(wù)鏈條,這樣即使部分服務(wù)出現(xiàn)問(wèn)題也不會(huì)影響到整個(gè)服務(wù)的崩塌。 ? 3、快速拒絕:當(dāng)服務(wù)過(guò)載時(shí)盡早拒絕請(qǐng)求,由服務(wù)調(diào)用方換機(jī)重試避免單一服務(wù)器重試過(guò)載,快速拒絕和有損服務(wù)中的及早拒絕是一個(gè)概念的方法,從過(guò)程的源頭將問(wèn)題解決,成本越低,影響越小,前端保護(hù)后端的方式來(lái)解決問(wèn)題。 點(diǎn)評(píng):這里面需要指出一點(diǎn)的是,客戶端跟Web 系統(tǒng)不同,做這種操作的前提,是提前預(yù)計(jì)到關(guān)鍵路徑,在客戶端的版本更新中,將相關(guān)的指令和策略埋入,當(dāng)接受數(shù)據(jù)獲取異常時(shí),在客戶端自動(dòng)就降低請(qǐng)求頻率,比如一次請(qǐng)求失敗,用戶肯定想二次再刷,但是可能實(shí)際上沒(méi)有向后端請(qǐng)求,而是直接返回,請(qǐng)客戶稍安勿躁,如果不提前埋入,到有問(wèn)題時(shí)才處理是來(lái)不及的。 ? 4、支付分組:從支付環(huán)節(jié)入手,將所有紅包分為50個(gè)組,放在50個(gè)單獨(dú)的set上互不影響,單組set出問(wèn)題最多只影響1/50用戶,保證多數(shù)人服務(wù)不受干擾。分組set化也是柔性可用的一個(gè)重要技術(shù)手段,這一思維非常類似于現(xiàn)實(shí)生活中的集裝箱思維——通過(guò)標(biāo)準(zhǔn)化,規(guī)?;南潴w設(shè)計(jì),應(yīng)對(duì)復(fù)雜多樣的貨物,使每個(gè)流通環(huán)節(jié)既獨(dú)立又不失靈活。 ? 5、流量預(yù)加載:從客戶端入手,將語(yǔ)音圖片等極消耗流量的資源提前讓客戶端自動(dòng)下載預(yù)置好,提前將流量洪峰疏導(dǎo),并在活動(dòng)當(dāng)天CDN將準(zhǔn)備數(shù)百G帶寬應(yīng)對(duì),這塊也與過(guò)載保護(hù)中的快慢分離是相通的,將耗流量的服務(wù)提前加載避免高峰期間的沖突。 點(diǎn)評(píng):這是提前準(zhǔn)備,從各個(gè)路徑上,把緩存用到徹底。 大系統(tǒng)小做應(yīng)該來(lái)說(shuō),是一種意識(shí),他的核心思想是將功能復(fù)雜較大的系統(tǒng),化大為小,減少模塊耦合,降低關(guān)聯(lián)性,用多個(gè)獨(dú)立的模塊來(lái)實(shí)現(xiàn)整體系統(tǒng)的功能,大系統(tǒng)小做采用的是化繁為簡(jiǎn),分而治之,便于開發(fā)和迅速實(shí)現(xiàn)。 微信紅包如此龐大的后臺(tái)系統(tǒng),模塊也相當(dāng)之多,而這次的模塊微信開發(fā)后臺(tái)團(tuán)隊(duì)采用了系統(tǒng)高度模塊化的方式,分成一個(gè)個(gè)高度自制的小系統(tǒng),形成高內(nèi)聚低耦合的格局,每個(gè)模塊之間不會(huì)過(guò)分依賴對(duì)方,這樣的好處是不會(huì)因?yàn)槿魏我粋€(gè)模塊而影響全部服務(wù),避免牽一發(fā)動(dòng)全身的風(fēng)險(xiǎn),實(shí)現(xiàn)真正的灰度服務(wù)。 點(diǎn)評(píng):降低耦合,增加問(wèn)題處理時(shí)的難度和平時(shí)的可維護(hù)性。 ? 海量服務(wù)能力決定成敗 從2014的滴滴打車,到2015的微信紅包,騰訊用一個(gè)個(gè)案例,去證明自身在海量服務(wù)方面的實(shí)力。事實(shí)上,真正支撐起微信紅包順暢運(yùn)營(yíng)的幕后英雄,正是騰訊內(nèi)部一個(gè)叫做“海量之道2.0”的技術(shù)體系。有損服務(wù),柔性服務(wù),大系統(tǒng)小做三大手段也是脫胎于此體系中。移動(dòng)互聯(lián)網(wǎng)大戰(zhàn)硝煙味愈濃,BAT都在為爭(zhēng)奪支付入口使出渾身解數(shù),在業(yè)務(wù)從起步到小跑再到騰飛的過(guò)程中,巨頭背后的海量服務(wù)能力將對(duì)其最終成敗有著來(lái)越發(fā)深遠(yuǎn)的影響。 總結(jié):優(yōu)才網(wǎng)一直堅(jiān)持一個(gè)觀點(diǎn),盡管是在移動(dòng)互聯(lián)網(wǎng)時(shí)代,但是客戶端應(yīng)用開發(fā)本身,并不是體驗(yàn)的決勝之處,真正對(duì)團(tuán)隊(duì)挑戰(zhàn)的地方,還在于后端,無(wú)論是承壓能力,還是安全性等方面,如果這些地方過(guò)不了關(guān),整個(gè)應(yīng)用的基礎(chǔ)是不扎實(shí)的,我們也認(rèn)為,技術(shù)能力是應(yīng)用的骨架,如果技術(shù)能力,或者說(shuō)后端能力不強(qiáng),應(yīng)用在長(zhǎng)到一定程度也會(huì)支撐不下去。當(dāng)然可喜的是,現(xiàn)在有了很多云服務(wù),從Iaas 騰訊云、阿里云,到Paas SAE,另外還有專業(yè)的存儲(chǔ)云服務(wù),比如七牛,甚至對(duì)于代碼級(jí)服務(wù)質(zhì)量監(jiān)控 APM 廠商也出現(xiàn)了,國(guó)內(nèi)做得最好的是 OneAPM, 這些服務(wù)一定程度上能降低團(tuán)隊(duì)的技術(shù)要求,以及在平時(shí),能發(fā)現(xiàn)自己服務(wù)中所存在的問(wèn)題。進(jìn)行及早準(zhǔn)備。 來(lái)源:產(chǎn)品中國(guó) ? 有損服務(wù)-追求高可用和快速響應(yīng)。
? 柔性可用-細(xì)化場(chǎng)景把握核心需求。
? 大系統(tǒng)小做-保證進(jìn)程的功能單一
這篇文章比較偏向于技術(shù)架構(gòu)設(shè)計(jì)方面的東西。
與產(chǎn)品經(jīng)理有什么關(guān)系
與你也有什么關(guān)系?