尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️
紅包,這幾年最火的行銷系統。各大廠,無論雙11、春節都花費了大力氣,五花八門的產品竭力吸引眼球。
那麼如何設計一個能抗住億級並發的紅包系統了。這恐怕對任何一個團隊來說,都是一個很大的挑戰。經過這幾年的大促紅包開發(AR小獅子,紅包雨等),我們蘇寧團隊也在系統架構設計上積累一些經驗。
架構設計
核心業務系統架構設計做到大系統小做,各個服務之間做到高內聚低耦合,服務之間做到異步化,突發事件的時候能夠做到對非核心業務進行降級,保證核心功能可用,最大程度保證用戶體驗。
總體架構示意圖
系統主要分前台和後台兩個模塊。
- 後台:主要負責活動信息、獎項信息配置,並實時下發前台系統。
- 前台:主要提供了活動資格校驗、獎項配額扣減、概率服務、獎項列表服務等。
後台配置管理
後台配置管理維護活動信息及獎項信息,通過MQ下發給前台系統。前台系統將配置刷入本地緩存中。
準入驗證
活動開啟時間的,用戶級別、是否實名認證,每天活動期間抽獎次數驗證。
獎項配額管理(庫存扣減)
在大規模的流量下,我們要做到獎項數量不多發、不少發,還有合理的獎項發放能力和發放速度。保證整個活動按照產權預期效果執行。
強大的獎項處理能力。通過概率服務計算完之後,獎項數量通過redis做扣減,異步落DB和異步發放。
異步發獎
通過MQ的形式,通知下遊系統(促銷中心,易付寶),發放券和現金紅包。和下遊系統完全解耦,在大流量並發場景下,保護下遊系統,不被外部系統拖死。
數據實時計算
為了前端準確展示和數據決策的需要,我們需要知道準備的已發放的紅包數和現金數。基於多個IDC的多集群部署,我們需要多IDC的數據匯聚進行統計,我們通過數據庫Binlog抽數單向復制匯聚主機房,然後寫入kafka,通過spark的流式計算獲得秒級數據,寫入緩存。
流量控制與防刷
如何順利扛過流量洪峰,我們通過客戶端過載保護、流量清洗、流控控制、風控防刷、單機保護來保證系統平穩的運行。而且在過載保護和流控的時候,我們通過客戶端的預埋邏輯來展示未中獎的彩蛋,保證用戶體驗。
客戶過載保護:在客戶端層面進行流量攔截,在系統處於過載狀態的時候,通過客戶端的預埋邏輯,獲取實時配置,根據實時配置來限制流量往後發送。通過長連接推送和拉的形式來做到配置實時下發。
流量清洗:通過CDN和應用防火牆WAF進行流量清洗,有效的防止CC和DDOS等流量惡意攻擊。
集群限流策略:通過WAF層來做到流量控制,總量通過令牌桶算法限制總量,通過其他行為策略(單IP,單UA)來限制異常流量。
單機限流策略:限制單台機器的總訪問QPS,對超過閥值的流量進行限流。限制單機接口粒度的訪問QPS,對超過閥值的流量進行限流。
風控防刷策略:通過用戶帳號質量,用戶行為,用戶屬性(各種認證),惡意IP等策略來進行風控防刷。
資源管理
單元化部署
路由層(CDN層上做到)根據用戶的會員號,按照規則算法(取模等),垂直上下切分,形成各個獨立的集群。將流量分散到各個集群中,互不影響。而且不同集群可以部署到不同的機房。
故障切換
通過單元化的部署,在某一個IDC出現網路問題或不可預測的問題,可以短時間修改路由規則將流量切換到其他IDC集群。
彈性擴容
服務層擴容: 利用蘇寧雲的Docker的快速部署服務,當流量峰值超過預期的時候,通過Docker自動化操作集群,對服務層進行彈性擴容。
數據庫擴容: 數據庫部署為1主2備。預先設計好多個分表(比如512個表)並分配好主備對應的分表。在需要對數據庫層進行水平擴容時,將備庫切為寫庫,同時一鍵切換MYCAT的配置。
鏈路壓測
任何系統設計再完美,也不能保證在線上能夠完美達到預期,我們需要對系統在線上生產環境進行性能壓測。通過整個鏈路的壓測,我們能夠清晰的了解我們各個服務間的能力和瓶頸(主機、數據庫、網路、帶寬等),能夠針對瓶頸有效指定降級方案。
內部預熱和流量模型修正
前期在產品設計階段,我們通過往年數據和計劃引流方案,估算到各個頁面和各個系統的流量模型,通過模型來預估我們的系統容量。
在產品真正對外之前,發起幾輪內部的預熱,進行業務的演練,測試部分功能問題和體驗問題。同時,通過頁面埋點,根據真實的用戶行為習慣,修正我們預估的流量模型,能夠更好的來分配我們資源。
系統監控
當系統正式上線運行時,我們需要實時了解系統各個資源運行狀態,流量大小,業務參數。充分的保障業務節點的可用性、性能可靠性。及時發現突發狀況,按照預先準備的降級手段進行降級。
目前蘇寧的監控手段還是比較豐富的,通過雲跡(日志)、調用鏈監控、ZABBIX等平台,可以全面監控到:服務器負載監控、資源層負載監控、網路層監控、應用層接口監控、應用日志監控、應用服務器jVM層監控。
小結
每年的紅包大戰還在繼續,越來越多的行銷產品的不斷迭代,對我們IT團隊提出更高的要求。系統架構設計是沒有最終完美的,我們需要根據不同產品形式和要求,不斷迭代和重構我們的系統。未來,我們腳下的路還很長,蘇寧IT人還在砥礪前行。