騰訊大講堂&何嘉??發(fā)表于 2015.3.21712瀏覽3討論
編者按:2015年微信紅包書寫了一個全新奇跡——除夕搖一搖總次數(shù)110億次,峰值1400萬次/秒起宽,8.1億次每分鐘洲胖,微信紅包收發(fā)達10.1億次!驚人數(shù)字的背后坯沪,騰訊是怎么支撐的绿映?筆者有幸節(jié)前采訪到微信后臺技術(shù)負責人,與大家分享紅包背后的技術(shù)腐晾。
春晚當天叉弦,微信紅包聯(lián)合團隊徹夜加班全程守護
400倍的挑戰(zhàn)
今年微信紅包方式與去年用戶與用戶之間互發(fā)紅包相比,搖紅包的方式對業(yè)務量來說是一個極大的爆發(fā)藻糖,光是除夕10:30送出的一波紅包就達到了1.2億個淹冰,已經(jīng)是2014年除夕夜峰值的400倍之巨(2014年峰值每分鐘被拆開紅包數(shù)量僅2.5W個)!
進入搶紅包環(huán)節(jié)巨柒,后臺數(shù)據(jù)瞬間飆升
發(fā)10億紅包樱拴,難在哪里柠衍?
微信團隊總結(jié)下來有三大難點:
快——如何保證用戶快速搖到紅包?
準——如何保證搖到的紅包能成功拆開晶乔?
穩(wěn)——如何保證拆開的紅包能分享出去珍坊?
大量用戶在同一時間搖紅包,瞬間產(chǎn)生每秒千萬級的請求正罢,這個量級的請求如果不加以疏導處理直接到達后臺垫蛆,必定會導致后端服務過載甚至崩潰。
三大應對策略齊上陣
對于以上三個難點腺怯,微信后臺開發(fā)團隊主要通過三大應對策略應對:有損服務袱饭,柔性可用,大系統(tǒng)小做
??有損服務-追求高可用和快速響應呛占。
什么是有損服務虑乖?有損服務是通過精心拆分產(chǎn)品流程,選擇性犧牲一部分數(shù)據(jù)一致性和完整性從而保證核心功能絕大多數(shù)運行晾虑。這是騰訊在PC時代積累下來的一種特色運營策略——在資源一定的前提下疹味,互聯(lián)網(wǎng)條件千變?nèi)f化的場景中,量力而為帜篇,滿足用戶的核心需求糙捺。
微信紅包的核心點是搖,拆笙隙,分享紅包洪灯,整個系統(tǒng)設計時必須盡最大可能保證這三個步驟一氣呵成,任何關(guān)聯(lián)系統(tǒng)出現(xiàn)異常的時候馬上進行系統(tǒng)降級竟痰,防止引起系統(tǒng)雪崩签钩。
系統(tǒng)降級可以分為兩個方面,一是把核心功能進行分拆和簡化坏快,通過輔助輕量化的服務實現(xiàn)铅檩,確保最短關(guān)鍵路徑的可行,比方說在接入層置入搖紅包邏輯莽鸿,將每秒千萬級請求轉(zhuǎn)化為每秒萬級的紅包請求昧旨,再傳到紅包服務的后端邏輯,降低雪崩的可能性祥得。
同時后端采用異步分拆兔沃,接收到用戶請求時僅進行合法性驗證,驗證完成后直接告知成功啃沪,后續(xù)業(yè)務邏輯進入異步隊列進行處理粘拾,減少了用戶的等待時間,也極大降低了峰值雪崩的概率创千。
耗時最長的入賬操作缰雇,直接跳過入偷,異步處理
另外一方面是采取過載保護措施:
微信紅包的過載保護在客戶端已提前預埋了策略,在連接失敗或超時情況下會有相應提示械哟,減少用戶重復請求次數(shù)疏之。接入層面也會進行自我保護,針對頻繁發(fā)出請求的客戶端限制響應速度暇咆,并對系統(tǒng)負載劃分出若干等級锋爪,達到不同閾值時引導客戶端使用不同限速速率;在異常情況出現(xiàn)時爸业,采取減少紅包數(shù)其骄,異步限流降低拆/分享紅包的速率等措施減輕服務器端壓力;與此同時扯旷,微信紅包還有全程壓測流程拯爽,對整個業(yè)務鏈接進行自動提前評估,防止過載钧忽。
這畫面你可能沒見過毯炮,它其實早已在手機待命
在有損服務思想的重重保護下,第一波的搖紅包體驗活動中耸黑,微信紅包幾乎滿分通過考驗桃煎,其中過載保護的作用相當明顯,在客戶端大刊、接入層層減壓为迈、過濾,最終僅把十萬級壓力傳遞到后臺奈揍。
??柔性可用-細化場景把握核心需求曲尸。
柔性可用是在有損服務價值觀支持下的方法赋续,重點在于實際上會結(jié)合用戶使用場景男翰,根據(jù)資源消耗,調(diào)整產(chǎn)品策略纽乱,設計幾個級別不同的用戶體驗場景蛾绎,保證盡可能成功返回關(guān)鍵數(shù)據(jù),并正常接受請求鸦列,絕不輕易倒下租冠。
柔性服務更具有產(chǎn)品的思維性質(zhì),意義在于深刻理解產(chǎn)品每一個場景的核心價值薯嗤,把握用戶在每一個場景中的核心需求顽爹,設計不同層次的滿足核心訴求的辦法,對柔性服務在微信紅包中的實踐骆姐,紅包團隊也有相應的措施镜粤,主要可以分為幾大類捏题。
1、系統(tǒng)容災:面對大規(guī)模的請求量肉渴,系統(tǒng)容災必不可少公荧,容災一般可分為邏輯層容災和數(shù)據(jù)層容災,這次微信后臺開發(fā)團隊在容災布置中采用30%切換的邏輯層方案同规,即核心服務都能做到最多1/3服務器出問題的情況下自動容災切換以保證服務質(zhì)量循狰,提高預警級別換取系統(tǒng)的可用性。
2券勺、資源隔離:顧名思義就是把資源進行隔離減少服務支路間的影響绪钥,從邏輯入手,在資源邏輯中关炼,當A服務同時分派任務給BC服務時昧识,設定單個最大分配上限值,避免任意一個支路出問題影響整個服務鏈條盗扒,這樣即使部分服務出現(xiàn)問題也不會影響到整個服務的崩塌跪楞。
3、快速拒絕:當服務過載時盡早拒絕請求侣灶,由服務調(diào)用方換機重試避免單一服務器重試過載甸祭,快速拒絕和有損服務中的及早拒絕是一個概念的方法,從過程的源頭將問題解決褥影,成本越低池户,影響越小,前端保護后端的方式來解決問題凡怎。
4校焦、支付分組:從支付環(huán)節(jié)入手,將所有紅包分為50個組统倒,放在50個單獨的set上互不影響寨典,單組set出問題最多只影響1/50用戶,保證多數(shù)人服務不受干擾房匆。分組set化也是柔性可用的一個重要技術(shù)手段耸成,這一思維非常類似于現(xiàn)實生活中的集裝箱思維——通過標準化,規(guī)脑『瑁化的箱體設計井氢,應對復雜多樣的貨物,使每個流通環(huán)節(jié)既獨立又不失靈活岳链。
5花竞、流量預加載:從客戶端入手,將語音圖片等極消耗流量的資源提前讓客戶端自動下載預置好掸哑,提前將流量洪峰疏導约急,并在活動當天CDN將準備數(shù)百G帶寬應對寇仓,這塊也與過載保護中的快慢分離是相通的,將耗流量的服務提前加載避免高峰期間的沖突烤宙。
??大系統(tǒng)小做-保證進程的功能單一 ?遍烦。
大系統(tǒng)小做應該來說,是一種意識躺枕,他的核心思想是將功能復雜較大的系統(tǒng)服猪,化大為小,減少模塊耦合拐云,降低關(guān)聯(lián)性罢猪,用多個獨立的模塊來實現(xiàn)整體系統(tǒng)的功能,大系統(tǒng)小做采用的是化繁為簡叉瘩,分而治之膳帕,便于開發(fā)和迅速實現(xiàn)。
微信紅包如此龐大的后臺系統(tǒng)薇缅,模塊也相當之多危彩,而這次的模塊微信開發(fā)后臺團隊采用了系統(tǒng)高度模塊化的方式,分成一個個高度自制的小系統(tǒng)泳桦,形成高內(nèi)聚低耦合的格局汤徽,每個模塊之間不會過分依賴對方,這樣的好處是不會因為任何一個模塊而影響全部服務灸撰,避免牽一發(fā)動全身的風險谒府,實現(xiàn)真正的灰度服務。
海量服務能力決定成敗
從2014的滴滴打車浮毯,到2015的微信紅包完疫,騰訊用一個個案例,去證明自身在海量服務方面的實力债蓝。事實上壳鹤,真正支撐起微信紅包順暢運營的幕后英雄,正是騰訊內(nèi)部一個叫做“海量之道2.0”的技術(shù)體系惦蚊。有損服務器虾,柔性服務,大系統(tǒng)小做三大手段也是脫胎于此體系中蹦锋。移動互聯(lián)網(wǎng)大戰(zhàn)硝煙味愈濃,BAT都在為爭奪支付入口使出渾身解數(shù)欧芽,在業(yè)務從起步到小跑再到騰飛的過程中莉掂,巨頭背后的海量服務能力將對其最終成敗有著來越發(fā)深遠的影響。