天天看點

微網誌紅包技術最佳實踐:架構及運維紅包業務場景紅包系統設計紅包保障體系系統性能優化

微網誌紅包在春節也是一個比較熱門的詞彙,經常出現在各種事件流之中,但是微網誌紅包面臨的場景比較特殊,比如面臨億級使用者的大規模場景,它背後的技術架構和技術結構是怎麼樣的呢?來自微網誌紅包團隊的技術負責人柯立志在雲栖社群2017線上技術峰會紅包技術分會現場分享了微網誌紅包背後的技術實踐。

<b></b>

今年的場景新增了傳送門和粉絲紅包。傳送門主要是通過使用者下拉feed流獲得紅包,可以連續搶,得到獎品。粉絲紅包有密碼紅包和普通紅包,紅包的業務規模如下圖所示。

微網誌紅包技術最佳實踐:架構及運維紅包業務場景紅包系統設計紅包保障體系系統性能優化

紅包面臨的挑戰包括:單個紅包數額大;億級别使用者參與,覆寫全微網誌使用者;紅包種類多,業務複雜;整點準時搶,高并發通路量、瞬間峰值高;互動時間短,同步更新紅包狀态;多機房資料一緻性保證。

微網誌紅包技術最佳實踐:架構及運維紅包業務場景紅包系統設計紅包保障體系系統性能優化

紅包系統的整體架構包括應用層、服務層、資源層。應用層主要是使用者的入口,任何一個使用者進來之後都需要對其狀态進行驗證,是以需要進行使用者狀态驗證。服務層包括各個服務子產品,資源層則用到了資料庫、redis、mc、消息隊列等。

紅包塞錢實作過程是:使用者通過向用戶端塞錢進紅包,然後使用微網誌支付,經過隊列後進行拆包服務,其他使用者可以進紅包進行抽取。在使用者進紅包之前,微網誌已經在隊列中做了一些拆包的服務。

微網誌紅包技術最佳實踐:架構及運維紅包業務場景紅包系統設計紅包保障體系系統性能優化

如上圖所示,其中更新的紅包狀态包括使用者的狀态和紅包剩餘金額等。在紅包的抽取過程中大量使用了異步處理,這樣保證了使用者前端的可用性。

微網誌紅包技術最佳實踐:架構及運維紅包業務場景紅包系統設計紅包保障體系系統性能優化

微網誌拆包的金額在0.5-200元之間。最初采用了通用模型設計,保證了大額的、100左右的金額,導緻了0.5的比較多。之後,采用了基于正态分布的模型,對紅包進行插值使得整個紅包的金額配置設定更趨于合理。處理大額拆包時,做到了10萬以下金額秒級可以拆。對于10萬以上金額先拆分成10萬以下金額再進行拆分。

微網誌紅包技術最佳實踐:架構及運維紅包業務場景紅包系統設計紅包保障體系系統性能優化

最初的實作是通過nginx後端php服務以及存儲資源實作的。經過調研後,采用了nginx的高并發可用性,基于lua腳本語言實作應用層的服務。這樣能夠讓單台伺服器的并發數量能有數量級的提升。其缺點是對于快速業務耗費的人力成本和調試成本更高。

在紅包分發期間,微網誌用到的裝置包括微網誌自有機房、阿裡雲包月機房、阿裡雲動态擴容(根據峰值實時動态擴容)。同時,各個機房之間mc的緩存需要同步,并且同步機制需要達到毫秒級才能保證所有使用者看到的紅包狀态均一緻。緩存資源的實作通過消息隊列實作,若消息隊列發現緩存積壓的資源比較多,可以通過實時的删寫來減少(前提是三個部署都存在,如果動态擴容則删寫,如果動态擴容收容則不删寫)。阿裡雲的機器都是實時配置設定的,是以我們需要有快速響應的機制來更快的進行擴容和對mc緩存資源的寫。

微網誌紅包技術最佳實踐:架構及運維紅包業務場景紅包系統設計紅包保障體系系統性能優化

春晚當天,微網誌紅包當晚從20點開始每個整點的推送。為了減少對應接口的使用者資訊,提前預熱了一批mau使用者,減少可能由于峰值帶來使用者服務系統壓力,在當天預熱了mau使用者資料,這樣做可以保證在每個整點時間到來之前的紅包資料為熱資料。

微網誌紅包技術最佳實踐:架構及運維紅包業務場景紅包系統設計紅包保障體系系統性能優化

異步化就是用消息隊列來處理一些類似于使用者時間比較長或者需要消耗大量資源的處理。比如抽獎,在抽獎的核心邏輯裡,營運可配置、使用者資訊、紅包狀态的判斷均用到了異步化來驗證目前的使用者是否中現金、卡券或者其他獎品。使用者中獎後,獎品将進入隊列,進行現金兌賬、現金進錢包、發私信,這樣就給前端使用者的抽獎節省了大量的時間,使得前端的接口響應時間非常快。

微網誌紅包技術最佳實踐:架構及運維紅包業務場景紅包系統設計紅包保障體系系統性能優化

系統保障的前提是監控,監控主要通過五個層面來進行的。網絡監控主要是監控專線帶寬,微網誌在春節期間大量使用阿裡雲的機器,對于專線的監控是有必要的。服務監控主要是自有服務的監控,類似監控feed接口、用戶端拆和抽、傳送門等服務的響應時間以及服務接口傳回的狀态。裝置監控主要是前端機、伺服器的監控,包括cpu、記憶體、網卡等的監控。資源監控涉及到緩存資源、存儲資源,資源也是通過網絡協定進行調用的,是以網絡層面的問題會導緻資源的可用性降低、響應時間變長。是以在應用層或者底層架構上都對資源所涉及的相關端口做了一些監控,比如每一次連接配接的響應時間、操作的響應時間、每一種響應時間的占比。接口監控主要依賴于其他接口,類似于使用者資訊的接口、微網誌錢包支付接口、卡券接口。

預案主要做了兩類,一類是能夠快速擴容,因為在每一個推廣的時間段都申請了部分備援的伺服器,如果負載異常則會實時部署上去;一類是快速切換,通過切層的切換快速應對突發情況。

服務降級主要在服務異常或者負載過高時對非核心鍊路進行降級。

微網誌紅包技術最佳實踐:架構及運維紅包業務場景紅包系統設計紅包保障體系系統性能優化

紅包是由各個子產品組成的,是以要對各個子產品進行性能檢測。性能檢測的前提是制定性能名額,名額主要通過響應時間、接口輸出大小制定。然後進行子產品性能壓測,分析子產品具體消耗(時間及輸出大小),根據具體點進行子產品優化,直到子產品性能達到标準才停止循環。

微網誌紅包技術最佳實踐:架構及運維紅包業務場景紅包系統設計紅包保障體系系統性能優化

根據目前應用場景使用者的dau和mau去預估在某個時間點最大的qps。根據最大的qps以及單機所承載的qps預估應用伺服器的數量。根據接口依賴程度、接口通路量占比預估每個接口輸出的帶寬,預算出整體的帶寬占用來進行帶寬方面的擴容以及預演。資源占用的評估主要根據最大的qps以及後端端口資源需要使用的數量來評估,保證在出現預估範圍内qps時系統服務的穩定。