微信產品經理和架構師們是靠什么扛住了10億個紅包?

3 評論 21178 瀏覽 67 收藏 13 分鐘

Nancy導讀:微信這么大的流量,尤其是瞬間的峰值,對于任何團隊和架構師都是一個極大的挑戰,我們也在想,微信團隊會用什么樣的辦法扛住了搶紅包的流量?

? 微信這么大的流量,尤其是瞬間的峰值,對于任何團隊和架構師都是一個極大的挑戰,我們也在想,微信團隊會用什么樣的辦法扛住了搶紅包的流量,正巧今天騰訊大講堂的公共賬號就分發出了這篇文章,盡管沒有從具體的技術細節上介紹,但在宏觀策略上還是相當地有學習的價值,分享給大家。

?400倍的挑戰

今年微信紅包方式與去年用戶與用戶之間互發紅包相比,搖紅包的方式對業務量來說是一個極大的爆發,光是除夕10:30送出的一波紅包就達到了1.2億個,已經是2014年除夕夜峰值的400倍之巨(2014年峰值每分鐘被拆開紅包數量僅2.5W個)!

6

進入搶紅包環節,后臺數據瞬間飆升

?發10億紅包,難在哪里?

微信團隊總結下來有三大難點:

? 快——如何保證用戶快速搖到紅包?

? 準——如何保證搖到的紅包能成功拆開?

? 穩——如何保證拆開的紅包能分享出去?

大量用戶在同一時間搖紅包,瞬間產生每秒千萬級的請求,這個量級的請求如果不加以疏導處理直接到達后臺,必定會導致后端服務過載甚至崩潰。上文中除夕當天后臺監控數據曲線便能說明一切——在前臺重重的分流減壓下,后臺服務器負載仍然瞬間飆升十倍以上。

? 三大應對策略齊上陣

對于以上三個難點,微信后臺開發團隊主要通過三大應對策略應對:有損服務,柔性可用,大系統小做

? 有損服務-追求高可用和快速響應。

什么是有損服務?有損服務是通過精心拆分產品流程,選擇性犧牲一部分數據一致性和完整性從而保證核心功能絕大多數運行。這是騰訊在PC時代積累下來的一種特色運營策略——在資源一定的前提下,互聯網條件千變萬化的場景中,量力而為,滿足用戶的核心需求。

微信紅包的核心點是搖,拆,分享紅包,整個系統設計時必須盡最大可能保證這三個步驟一氣呵成,任何關聯系統出現異常的時候馬上進行系統降級,防止引起系統雪崩。

系統降級可以分為兩個方面,一是把核心功能進行分拆和簡化,通過輔助輕量化的服務實現,確保最短關鍵路徑的可行,比方說在接入層置入搖紅包邏輯,將每秒千萬級請求轉化為每秒萬級的紅包請求,再傳到紅包服務的后端邏輯,降低雪崩的可能性。

2

點評:有損服務就是讓重要的事情先做,重要的人物先行。這在現實中也很常見,軍人買票優先,領導視察封路,讓領導車先行,我等小民等待也是這個路子。

同時后端采用異步分拆,接收到用戶請求時僅進行合法性驗證,驗證完成后直接告知成功,后續業務邏輯進入異步隊列進行處理,減少了用戶的等待時間,也極大降低了峰值雪崩的概率。

3

耗時最長的入賬操作,直接跳過,異步處理

另外一方面是采取過載保護措施:

微信紅包的過載保護在客戶端已提前預埋了策略,在連接失敗或超時情況下會有相應提示,減少用戶重復請求次數。接入層面也會進行自我保護,針對頻繁發出請求的客戶端限制響應速度,并對系統負載劃分出若干等級,達到不同閾值時引導客戶端使用不同限速速率;在異常情況出現時,采取減少紅包數,異步限流降低拆/分享紅包的速率等措施減輕服務器端壓力;與此同時,微信紅包還有全程壓測流程,對整個業務鏈接進行自動提前評估,防止過載。

點評:在前端擋住對后端流量的進入,比如出現通信失敗時,當前這個用戶,對后臺已經不會有什么壓力了。

4

這畫面你可能沒見過,它其實早已在手機待命

在有損服務思想的重重保護下,第一波的搖紅包體驗活動中,微信紅包幾乎滿分通過考驗,其中過載保護的作用相當明顯,在客戶端、接入層層減壓、過濾,最終僅把十萬級壓力傳遞到后臺。

? 柔性可用-細化場景把握核心需求。

柔性可用是在有損服務價值觀支持下的方法,重點在于實際上會結合用戶使用場景,根據資源消耗,調整產品策略,設計幾個級別不同的用戶體驗場景,保證盡可能成功返回關鍵數據,并正常接受請求,絕不輕易倒下。

柔性服務更具有產品的思維性質,意義在于深刻理解產品每一個場景的核心價值,把握用戶在每一個場景中的核心需求,設計不同層次的滿足核心訴求的辦法,對柔性服務在微信紅包中的實踐,紅包團隊也有相應的措施,主要可以分為幾大類。

? 1、系統容災:面對大規模的請求量,系統容災必不可少,容災一般可分為邏輯層容災和數據層容災,這次微信后臺開發團隊在容災布置中采用30%切換的邏輯層方案,即核心服務都能做到最多1/3服務器出問題的情況下自動容災切換以保證服務質量,提高預警級別換取系統的可用性。

? 2、資源隔離:顧名思義就是把資源進行隔離減少服務支路間的影響,從邏輯入手,在資源邏輯中,當A服務同時分派任務給BC服務時,設定單個最大分配上限值,避免任意一個支路出問題影響整個服務鏈條,這樣即使部分服務出現問題也不會影響到整個服務的崩塌。

? 3、快速拒絕:當服務過載時盡早拒絕請求,由服務調用方換機重試避免單一服務器重試過載,快速拒絕和有損服務中的及早拒絕是一個概念的方法,從過程的源頭將問題解決,成本越低,影響越小,前端保護后端的方式來解決問題。

點評:這里面需要指出一點的是,客戶端跟Web 系統不同,做這種操作的前提,是提前預計到關鍵路徑,在客戶端的版本更新中,將相關的指令和策略埋入,當接受數據獲取異常時,在客戶端自動就降低請求頻率,比如一次請求失敗,用戶肯定想二次再刷,但是可能實際上沒有向后端請求,而是直接返回,請客戶稍安勿躁,如果不提前埋入,到有問題時才處理是來不及的。

? 4、支付分組:從支付環節入手,將所有紅包分為50個組,放在50個單獨的set上互不影響,單組set出問題最多只影響1/50用戶,保證多數人服務不受干擾。分組set化也是柔性可用的一個重要技術手段,這一思維非常類似于現實生活中的集裝箱思維——通過標準化,規?;南潴w設計,應對復雜多樣的貨物,使每個流通環節既獨立又不失靈活。

? 5、流量預加載:從客戶端入手,將語音圖片等極消耗流量的資源提前讓客戶端自動下載預置好,提前將流量洪峰疏導,并在活動當天CDN將準備數百G帶寬應對,這塊也與過載保護中的快慢分離是相通的,將耗流量的服務提前加載避免高峰期間的沖突。

點評:這是提前準備,從各個路徑上,把緩存用到徹底。

? 大系統小做-保證進程的功能單一

大系統小做應該來說,是一種意識,他的核心思想是將功能復雜較大的系統,化大為小,減少模塊耦合,降低關聯性,用多個獨立的模塊來實現整體系統的功能,大系統小做采用的是化繁為簡,分而治之,便于開發和迅速實現。

微信紅包如此龐大的后臺系統,模塊也相當之多,而這次的模塊微信開發后臺團隊采用了系統高度模塊化的方式,分成一個個高度自制的小系統,形成高內聚低耦合的格局,每個模塊之間不會過分依賴對方,這樣的好處是不會因為任何一個模塊而影響全部服務,避免牽一發動全身的風險,實現真正的灰度服務。

點評:降低耦合,增加問題處理時的難度和平時的可維護性。

? 海量服務能力決定成敗

從2014的滴滴打車,到2015的微信紅包,騰訊用一個個案例,去證明自身在海量服務方面的實力。事實上,真正支撐起微信紅包順暢運營的幕后英雄,正是騰訊內部一個叫做“海量之道2.0”的技術體系。有損服務,柔性服務,大系統小做三大手段也是脫胎于此體系中。移動互聯網大戰硝煙味愈濃,BAT都在為爭奪支付入口使出渾身解數,在業務從起步到小跑再到騰飛的過程中,巨頭背后的海量服務能力將對其最終成敗有著來越發深遠的影響。

1

總結:優才網一直堅持一個觀點,盡管是在移動互聯網時代,但是客戶端應用開發本身,并不是體驗的決勝之處,真正對團隊挑戰的地方,還在于后端,無論是承壓能力,還是安全性等方面,如果這些地方過不了關,整個應用的基礎是不扎實的,我們也認為,技術能力是應用的骨架,如果技術能力,或者說后端能力不強,應用在長到一定程度也會支撐不下去。當然可喜的是,現在有了很多云服務,從Iaas 騰訊云、阿里云,到Paas SAE,另外還有專業的存儲云服務,比如七牛,甚至對于代碼級服務質量監控 APM 廠商也出現了,國內做得最好的是 OneAPM, 這些服務一定程度上能降低團隊的技術要求,以及在平時,能發現自己服務中所存在的問題。進行及早準備。

來源:產品中國

 

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 這篇文章比較偏向于技術架構設計方面的東西。

    來自上海 回復
  2. 與產品經理有什么關系

    來自北京 回復
    1. 與你也有什么關系?

      來自廣東 回復