編者按與傳統意義上的紅包相比,近兩年火起來的“紅包”,似乎才是現在春節的一大重頭戲。歷經上千年時代傳承與變遷,春節發紅包早已成為歷史沉澱的文化習俗,融入了民族的血脈。按照各家公佈的資料,除夕全天微信使用者紅包總髮送量達到10.1億次,搖一搖互動量達到110億次,紅包峰值傳送量為8.1億次/分鐘。春晚直播期間討論春晚的微博達到5191萬條,網友互動量達到1.15億,網友搶微博紅包的總次數超過8億次。
為此,InfoQ策劃了“春節紅包”系列文章,以期為讀者剖析各大平臺的紅包活動背後的技術細節。本文為微博篇。
隨著網際網路的發展,打破了以往傳統的發紅包,帶給了紅包全新的玩法。微博紅包已經成為使用者給粉絲拜年的一種途徑,土豪版成為土豪刷存在感的方式。每年的紅包大戰都是使用者的現金盛宴,對於整個系統卻是殘酷的考驗。
微博有8億註冊使用者,單日活躍使用者數1.34億的社交平臺。紅包在微博平臺上執行,針對所有的微博使用者開放,微博所有使用者都可參與紅包活動。微博紅包有如下特點:
1.紅包價值高、種類多、覆蓋使用者廣,億級別使用者參與。
2.半點準時開搶,高併發訪問、瞬間峰值高,每分鐘帶來上億次的搶紅包峰值。
3.請求快速響應,更新億級使用者中獎狀態及紅包狀態。
4.單個紅包數額大。
春晚當天紅包總價值超過10億,有1.34億使用者參與,產生了8億多次的搶紅包行為,其中併發量為平時峰值的10倍左右。在伺服器數量一定的情況下,如何構建高併發操作、瞬間峰值高的穩定服務?對於團隊和架構師都是一個極大的挑戰。這時候系統的架構尤為重要!
紅包架構
微博紅包支援每秒幾十萬次的操作,應對突發性的熱點事件,快速響應,高內聚低耦合的服務成了架構首先要考慮的因素。
微博是社交型應用,紅包在使用者資料、關係、搶紅包等結構上存在著各種各樣複雜的依賴,這些依賴相比其它應用來說,呼叫頻率更高,效能要求也更高。
如上圖所示,有多個應用模組接入紅包的服務層,服務層由多個節點組成,每個節點對應相應的功能並且相對獨立。程式碼模組的使用和組織上相對獨立,保證主功能的快速和穩定,將附屬的新功能分離在獨立模組中。其中紅色虛線框內為核心的功能模組,是重點需要保護的功能。
微博紅包提供獲取紅包屬性(紅包金額、紅包設定、紅包狀態、獲取抽取結果列表、拆包,抽獎等)介面。服務層呼叫紅包SDK相應的API,會根據應用層邏輯需求提供資料和定製化得資料,完成前端完成互動,達到應用層需要展現的效果。
防刷策略
微博紅包有別於微信使用者發出的紅包,微信使用者發出的紅包是針對自己所認識的朋友或者已存在於微信群的使用者;微博紅包是針對於微博所有使用者的紅包,通過分析參與紅包的使用者資料每年都會產生一些囤積大量賬號準備在春晚大發橫財的公司和個人。如何防止微博紅包被自動註冊或者通過轉賣賬號來領取紅包?這成為面對我們需要解決的一大問題。
微博通過基於使用者在微博上的行為分析,通過登入,發微博,身份驗證等方面來進行分析。主要有:
1.使用者註冊:通過使用者行為分析來識別機器註冊的使用者,則註冊環節進行攔截。
2.使用者登入:分析使用者登入的行為,通過驗證碼,身份驗證以及手機號驗證等措施來提高機器自動登入的門檻。
3.賬號品質:通過實名認證,微博的動態等方面來計算出使用者的品質。
4.參與紅包:紅包戰場一貫是刷獎賬號的獲利主戰場, 通過使用者平時在微博的行為、屬性以及實時的登入狀態和常用裝置來進行分析,判斷是否是正常賬號來確定是否可以中獎。
完善的監控
紅包系統是一個大而規則複雜的系統,系統越大,依賴的資源越多,也就越容易出現各種各樣的問題。為了給提供穩定執行的服務,必須要能時刻知曉各個資源當前的執行狀態。並且在系統出現異常之前或者出現異常的時候,對問題進行排查和定位。
如上圖所示,完善的監控系統,為微博紅包順利度過春晚提供了很好的保障。主要涉及的監控如下:
1、應用層介面響應時間監控
通過實時的分析access log日誌,以HTTP code和響應時間維度實時統計出介面的狀態和效能,根據佔比來檢視介面的健康程度。
2、服務層各模組效能監控
在模組中記錄開始時間和結束時間,每次處理完計算出模組的耗時,通過這種方式很好的發現各個模組是否正常。
3、網路層監控
微博紅包的出口網路是一個單獨的app池,出口頻寬使用到80%的時候網路穩定性就可能受到影響。通過計算後端伺服器輸出計算出頻寬,以便能夠做到及時響應擴容。
4、資源層的監控
對各種資源的監控,比如Redis、MySQL、MC等資源的連線時間、狀態和操作的實時統計分析,快速定位是否存在資源瓶頸。
5、伺服器的效能監控
通過運維監控系統,對伺服器的CPU、記憶體使用情況,做到了能夠觀察每臺伺服器具體的執行情況。
6、系統錯誤日誌的監控
彈性資源管理和排程
1、故障的秒級切換
微博紅包服務部署在了三個機房(包括雲服務),任何一個機房如果出現網路或者其它不可預測的問題可以在幾秒鐘之內將服務切換到其它機房。
2、資源的相互獨立
資源的相互獨立,讓資源的可擴充套件性變得容易。而且使得各個服務之間交叉影響達到了最小。
3、引入阿里雲做為第三機房,使用Docker快速部署服務
紅包的核心服務主要分佈在 2 個機房,兩者互相做為災難備份用途,為應對超預期的峰值,引入阿里雲做為第三機房。使用定製化的紅包Docker快速部署服務來實現彈性排程架構。通過Docker自動化操作大規模叢集,進行彈性排程資源的任務,實現快速部署服務來應付超預期的峰值。
系統的挑戰和效能優化
為了保證使用者體驗,微博紅包需要解決以下幾個問題:
1.系統性能的可靠性
2.關鍵節點的可用性
3.如何應對突發熱點
4.業務頻繁迭代的處理
1、系統架構的升級
模組的獨立化,避免出現模組間的相互影響。
nginx+lua的使用,使得伺服器的QPS有了數量級的提升,同時伺服器叢集做到了秒級重啟。
2、修枝剪頁
減少對於系統外部的依賴,梳理完整的呼叫關係圖。非核心功能使用非同步呼叫,合併相關的呼叫,去掉重複的呼叫。保證核心呼叫邏輯,避免非核心業務影響核心業務。
3、多級快取
服務端本地快取,使用nginx本身快取和伺服器的L0快取,來提升模組的響應速度,做到了90%以上核心介面的響應時間在50ms以內,減少了程序等待時間,提升了伺服器的處理速度。
一年一度的各大平臺搶紅包還會延續下去,這是一個鬥智鬥勇的過程,在伺服器有限的情況下每一次與峰值的對抗都是對技術一次極大的挑戰,每次挑戰都是帶來技術上的成長和收穫。