1. 程式人生 > >超級面試題 Q342-一文徹底解決微信紅包問題

超級面試題 Q342-一文徹底解決微信紅包問題

無法 紅包 秒殺系統 設計 微信紅包 面試 出現 不可 ans

微信紅包架構是一個高頻題,在面試中經常問到。經常問表明很重要,重要在兩塊:微信用戶多,2018年用戶量突破10億,大家都是用戶,對紅包很熟悉;微信紅包是典型的秒殺場景,是用戶量最大的秒殺系統之一, 2017年1月除夕當天收發微信紅包142億個,收發峰值每秒76萬個。跟微信紅包類似的產品也比較多,比如QQ紅包、微博紅包、支付寶紅包等等,紅包功能逐漸成為一種標配。超級面試題的Q342、Q2、Q320都是微信紅包架構問題,本文對後兩個問題同樣適用。

討論微信紅包架構之前,先討論架構設計的原則。架構設計有兩個原則最重要:第一個是抽象出原子業務,原子業務就是最小的不可分割的業務; 第二個是擴展,對原子業務進行繼承和組合,實現不可預知的與時如流的具體需求,但原子業務本身(盡量)不做修改。

微信紅包的原子業務是這樣的:蘇大強給小蔡發了一個紅包,小蔡看到紅包,看了下,然後拆紅包。抽象表述,A給B發了一個數額為X的紅包,A賬戶扣掉X元。24小時內,B可以查看紅包,並決定是否拆紅包,如果拆紅包,B的賬戶增加X元。超過24小時B沒有拆紅包,紅包失效,X元退還到A的賬戶。

對原子業務進行擴展:A在群裏發紅包,每人都可以拆一個X元紅包; A在群裏發紅包,紅包總額X元,每人拆紅包得到隨機金額。微信紅包的人數上限是100人,每個微信群的上限是500人,因此每個紅包最多有500人同時進行查看和拆包,這個量級單機能很好地處理。如果微信紅包的人數沒有上限,可能會出現A給十億人發紅包的場景,如果微信群的人數沒有上限,可能會出現十億人查看和拆紅包,這個量級單機無法處理,需要分布式處理。紅包人數上限和微信群人數上限是關鍵約束,它們決定架構設計。

因此,微信紅包的本質,是若幹個相互獨立的任務,在每個任務裏一個人給最多不超過100人發紅包,最多不超過500人查看並拆紅包。任務總數可能很大,比如每秒近百萬並發。解決方案的核心,是構造出相互獨立的任務,然後分布式在多臺機器上執行。
… …
更多內容 http://www.chaojimianshiti.com

超級面試題 Q342-一文徹底解決微信紅包問題