微信工程師為你講述春晚紅包的系統設計和優化

2022-03-31 09:39:27 字數 1851 閱讀 7047

講師:jeri

核心功能&目標

搖:搖的流暢

快:搶的要快

爽:拆的爽

穩:能分享出去

系統難點

1.中國運營商網路環境複雜,覆蓋面廣,春節期間網路吃緊,容易出現網路故障

2.在尖峰搖時如何避免服務雪崩

3.在服務資源有限時,如何提供柔性服務

4.如何構造有損服務

5.如何構造set模型

6.如何解決併發搶

7.如何實現實現資料一致性

系統整體架構圖

跨區域網路解決方案

跨區域網路問題,在物理實施上,也需要有備份繞行的能力,這個可以在系統的底層框架中實現,當指定專線出現故障時,快速切換網路,恢復服務

如何構建有損服務

比如,春晚搖一搖,我們的核心點是搖/拆/分享,那系統的資源優先需要保證這些服務的響應,任何關聯系統出現異常的時候馬上進行系統降級,防止引起系統雪崩。

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

柔性服務.打造好的產品體驗

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

比如,紅包的核心功能拆,拆完需要記錄使用者頭像暱稱,轉帳資金劃轉,同時輸出同個訂單下其它拆記錄,拆過程這些操作都可能失敗,但是核心操作獲取紅包是成功的,此時,我們至少可以告訴使用者搶到金額,不至於讓使用者焦急等待,不斷重試,未完成的操作(頭像補全與資金轉帳),可以通非同步補嘗方式重試。這樣解決了使用者的問題,也緩解了系統壓力。

如果構造set模型

set模組就像乙個貨櫃,把各模組標準化,模組化,規模化,它為海量服務運營,特別是裝置管理、網路架構,提供了巨集觀運營支撐框架,從而極大提高了海量服務運營效率。

如何解決併發搶

群裡紅包的規則是金額隨機搶,在乙個大**乙個紅包出去,搶併發請求量高,在同乙個資源上操作,需要增加鎖操作,避免乙個搶總數超過傳送紅包總數,眾所周所,mysql的加鎖操作,很多搶在乙個鎖上等,效能損耗大,吞吐量下降,對於海量服務的操作,是不能滿足要求。

在set模組的基礎上,我們把發/搶的資源請求都會落到同乙個資源set,在最外層,cache紅包的狀態,如果紅包已經被搶完了,即刻返回,如果紅包未接完,對於乙個紅包進去搶環節還有限流,這是第一級保護,通過一致性hash演算法,一乙個單到dao層都會路由到同乙個機器的同乙個程序,dao到mysql在現乙個連線上完成搶操作,把併發搶修改成序列化,mysql可以無鎖等待,效能明顯提公升。

如何實現資料一致性

談到分布式系統,先回顧cap理論

c:consistency資料一致更新,所有變動都是同步的

a:高可用,好的響應效能

p: 分割槽容忍,可靠性

在我們的系統設計中,同樣碰到這個問題,無法同時滿足三個因子,移動網際網路系統,高可用性是必要要求,資料分割槽也是分布式系統的條件,所以,我們設計系統時,只能盡量保證資料一致性,只要一定時間視窗內,完成資料一致,讓使用者滿意。

n:資料副本份數紅包有三份

r: 一次需讀取的副本紅包一次從乙個副本可以全部讀取需要資料

w: 一次寫入資料2份實時寫,一分非同步化

r(1) + w(2) <=n從公式算出,我們的資料模型也是弱一致性

使用者資料是非同步更新,更新失敗,通過訊息中心,非同步重試,根據db資源負載設定呼叫方的呼叫閥值,除了實時重試,我們還有準實時資料核對,保證資料最終一致性。

你對前端工程師的理解

首先,你必須是乙個合格的 頁面仔 所有的頁面可以用css html來實現。js和jquery也是必須會的,因為純靜態的頁面是沒辦法完全吸引乙個使用者的。你的各種特效就需要使用js或者jquery啦。jquery是乙個框架它能實現js的一些效果,但是它的使用學習就更加簡單。其次,前端主要負責實現視覺和...

月活8 89億背後 微信工程師細數相容測試經驗

目前國內很多硬體廠商,對於android版本,深度定製自己的rom 系統版本,例如小公尺的miui 華為的emui 聯想的vibeui等。這就是n個廠商乘以m個版本,導致的版本數量 牽引出各種適配問題。1 給使用者造成極差的使用體驗 2 給開發和測試造成額外的工作 3 造成因版本發布延遲引起的一系列...

月活8 89億背後 微信工程師細數相容測試經驗

目前國內很多硬體廠商,對於android版本,深度定製自己的rom 系統版本,例如小公尺的miui 華為的emui 聯想的vibeui等。這就是n個廠商乘以m個版本,導致的版本數量 牽引出各種適配問題。1 安裝和啟動失敗 2 crash問題 1 給使用者造成極差的使用體驗 2 給開發和測試造成額外的...