Categories
程式開發

春晚紅包:史上最難開卷考試,快手交捲了


春晚紅包史堪稱互聯網公司宕機血淚史,再強的高並發能力在海內外超過 10 億人的觀看規模面前都顯得那麼脆弱。在互聯網人的固有印象裡,春晚活動是 BAT 三家輪番坐莊的技術盛事,畢竟只有具備足夠的用戶體量,才可能有足夠的技術能力支撐起春晚級別的高並發流量。今年除夕,作為BAT 以外第一家扛起春晚戰旗的互聯網公司,快手在今年的春晚紅包活動中,紅包互動總量達到639 億次,創春晚史上最大的視頻點贊紀錄,紅包站外分享次數達到5.9 億次。除夕前一天,面對嚴峻疫情,技術團隊緊急開發,快手在春晚紅包活動提現環節上線“助力武漢”紅包捐贈功能。

快手是如何準備這場“春晚紅包”戰役的?在籌備壓力最大、最忙碌的春晚前一周,InfoQ 記者在位於北京上地西路的快手總部採訪了包括資源調度、基礎設施架構、應用啟動、客戶端穩定性在內的多個部門技術負責人,還原出一個全貌。

代號 A1,快手春晚交卷

春晚紅包:史上最難開卷考試,快手交捲了 1

中國互聯網信息中心發布的《中國互聯網絡發展狀況統計報告》顯示,截至 2018 年 12 月底,中國網民規模達 8.29 億,手機網民規模達 8.17 億。移動互聯網前所未有地普及,也造就了世界互聯網史上那些罕見的高並發流量場景:以雙十一為代表的電商大促、春運放票時的 12306 系統,以及每年除夕的春晚紅包大戰。

2020 年春晚紅包活動,是在中國互聯網傳統豪強 BAT 以後,第一次出現新興面孔,這家公司的名字是:快手。

從 1 月 24 日晚 8 點到次日凌晨,快手共發放 10 億元現金紅包,這個金額創下了春晚紅包的新記錄。在曾經讓微信搶先支付寶半個身位的 2015 年,微信發了 5 億紅包;2016 年,支付寶發了 8 億紅包;2019 年,百度發了 9 億紅包。

除了 10 億現金紅包,快手為這次春晚投入的還有集卡活動的 1 億現金,以及支持當天春晚的 10 萬台(其中包括 2 萬台雲端)服務器。

除了真金白銀的投入之外,人力上也是一場“豪賭”。 InfoQ 記者了解到,快手春晚紅包項目組特意在開始籌備時去找百度、阿里的同學取經。 “誇張點說,我們人力上比人家少了一個零。”

春晚紅包項目在快手內部的代號是 A1,這個名字源自快手在北京西二旗的總部樓棟排布。快手總部園區有ABCDEF 共6 棟辦公樓,各個團隊的工位分散在這6 棟辦公樓裡,而在春晚紅包項目確定以後,為了工作上的協同順暢,整個項目攻堅組在A 座開闢出了春晚戰場,包括設計、研發、產品等成員都聚集在這裡。因為項目的參與度很廣,出於嚴格的保密考慮,最終將春晚項目的代號定做 A1,也契合了春晚紅包這個項目的重要性。

“從爬泰山到登珠峰”

羅振宇在 2019 的跨年演講中曾提到:得到原本打算在春晚投放廣告,但是被勸住了,因為有一條不成文的規定——要想春晚打廣告,產品日活先過億。原因很簡單,用戶量過低,技術很難支撐起春晚級別的高並發流量。這也是最近幾年,春晚紅包項目被互聯網豪強 BAT 三家壟斷的原因所在。

  • 2015 年,微信與春晚首次合作,當晚八、九點左右有短暫時間的微信與紅包宕機。此後的每個除夕,微信紅包都曾出現不同程度的宕機問題。
  • 2018 年,淘寶接過了春晚活動大旗,以 2017 年雙十一容量為基礎對登錄擴容 3 倍,卻在 15 倍的流量面前敗下陣來。
  • 2019 年,百度春晚紅包活動主站相對平穩,第三方應用商店卻在洶湧的流量面前全線宕機。
  • 2020 年,快手接下了春晚戰旗。

面對春晚的頂級流量,即使平時服務億級日活用戶的快手,內部也將 A1 項目稱之為“從爬泰山到登珠峰”。

這不是快手與春晚的首次合作,但作為春晚紅包活動的承接者,卻是快手的第一次。對春晚而言,這同樣是一次全新的體驗,因為春晚紅包第一次走入了視頻紅包時代。在除夕當晚的央視春節聯歡晚會上,快手以“點贊中國年”為紅包互動主題,推出 5 輪搶紅包活動,並採用“視頻 + 點贊”的全新玩法。不過玩法新代表著挑戰也新,快手獨特的短視頻場景業務所帶來的挑戰在春晚流量面前愈加凸顯。

首先,看下快手這款 App 的屬性。快手 App 所代表的短視頻社區類 App,一直有著用戶粘性高、使用時間長的特性。每天大規模的視頻作品發布和播放,還有實時的直播和用戶互動,對流量而言上下行壓力已經不小,而這些流量在快手機房中都是共用的,這對春晚活動在架構設計方面提出了更多更高的要求。

其次,短視頻 + 直播場景,相對往年春晚活動,對於資源尤其是 CDN 和帶寬的佔用率更大。 在一定時間內,中國CDN 總量和商用帶寬資源的供應總量相對是穩定的,但視頻紅包場景下,數億人同時打開動輒數十M 的視頻文件,還有數千萬用戶同時湧入春晚直播間,所需要的資源,比起往年春晚要超過幾個量級。如何預估春晚流量,設計技術方案減輕壓力?如何精準計算需要採買的服務器、CDN、帶寬資源?在除夕全網資源吃緊的情況下,這是一大難題。

第三,活動策略與第三方溝通難題。今年的快手春晚,除了衝擊 3 億 DAU 的目標以外,同樣也有產品拉新的戰略考量。 2019 年百度春晚拖垮了包括 App Store、微信應用寶在內的各大主流應用市場,影響了百度的拉新目標。今年的快手勢必不願重蹈覆轍,但第三方應用市場,尤其是 App Store 和微信,溝通更加困難,卻是木桶中那個不得不解決的短板。

春晚紅包立項,面對這場硬仗,怎麼整?

萬變不離其宗,卻又不可同日而語

中國互聯網圈有一句戲言:沒有中國人搞不垮的網站。此言誠不我欺,這個網民人數超過8 億的國度,在多年電商大促、秒殺場景、12306 每年春運帶來的技術大討論的洗禮下,科技公司們應對高並發流量的能力逼近了軟硬件性能的極限。

縱觀最近幾年各大廠春晚紅包活動,技術向的解決方案可謂萬變不離其宗,無非是基礎設施(服務器、CDN、帶寬)的準備、內部架構的升級(核心鏈路升級、降級方案)等實現方式。說起來好像很簡單,但在極致的流量面前,難度卻不可同日而語。

基礎設施準備與架構升級

2019 年百度春晚的服務器數量是 10 萬台,其中有 5 萬台服務器是從百度核心的“鳳巢”廣告系統下線讓渡而來。基於短視頻業務對服務器等基礎資源的更高要求來看,快手為此次春晚活動準備的服務器數量不會低於百度。需要注意的是,服務器並不單純是物理機組成,還有相當規模的雲服務器,這又多出了跟各大雲服務商溝通性能資源的問題。

短視頻領域慣用的解決方案是將視頻放到內容分發網絡(CDN)上,既把視頻文件輸送到離用戶最近的地方,又利用大量CDN 節點分擔用戶觀看的流量,這是業界成熟的解決方案。但在春晚視頻紅包的數億瞬時流量面前,這個方案卻是完全頂不住的。春晚主持人口播搶紅包的時間節點,預估出來的視頻播放瞬時流量會超過中國的 CDN 帶寬容量總和,快手預估如果要保證春晚活動的體驗,至少需要數百 TB 帶寬資源。架構師們需要設計高效的資源預分發策略,並建立準確的帶寬預測模型,基礎設施建設人員也要做好合理的採買準備。

基礎架構一般都是線性演進的,大的基礎架構升級頻率不會很高,每年也就是小修小補一下。但這次春晚活動,倒逼著快手的架構超前升級了。

基礎架構負責人向 InfoQ 記者如此介紹。他是一名老“快手”,2015 年就加入了公司,一直負責基礎架構的設計與實現。這次的春晚紅包活動他參與了核心架構設計工作。

精心設計核心鏈路

架構上第一個挑戰是讓用戶順利“進門”。

日常情況下,用戶首次啟動快手 App 會有近百次與服務端的交互。可以想像在春晚活動開啟時,數億用戶同時啟動快手App 會帶來怎樣的流量洪峰,如果不做降級處理很可能直接沖垮服務器,這是紅包活動面臨的一個挑戰:如何讓用戶可以順利“進門”搶紅包,而不是被宕機的服務器擋在門外。

為確保用戶“進門”環節的應用啟動平穩度過,技術團隊在保證主要功能不受影響的前提下,設計了協議降級、頻率限制、過載保護、協議瘦身、延遲打散、CDN 兜底、業務邏輯優化等策略,使得系統可以承受億級別QPS 的流量衝擊,通過5 道“閘門”層層控制洪流,將發生“洪災”的概率幾乎降為0。

另外春晚的直播場景隨時可能出現緊急狀況,比如主持人口播紅包時間隨時可能調整。為了能在這樣的緊急狀態下,將核心指令下發到每個用戶,快手技術團隊為此精心設計了核心指令控制系統,一鍵式下發,最快可以做到一分鐘之內將指令觸達所有用戶,做到有備無患。

登錄註冊面臨平時數百倍挑戰。

從往年春晚紅包經驗來看,登錄註冊頁面是擊穿服務器的又一道坎。登錄註冊好比是用戶拿到紅包的鑰匙,春晚當天必然有大量新用戶註冊並登錄快手 App,快手預估除夕當晚登錄註冊頁面的挑戰可能達到平時的數百倍。為此快手準備了超平時登錄峰值數百倍的容量,在增加容量的同時,快手也做了登錄流程梳理和簡化。從客戶端到服務器總共做了幾十項優化,為的就是讓用戶能“秒登”快手 App,拿到紅包。

快手 App 登錄量的爆發,對第三方服務也是巨大的挑戰,比如三大運營商的一鍵登錄、短信網關以及騰訊三方授權都會受到衝擊。為了達到預期容量,三大運營商、微信團隊分別和快手登錄團隊一起為春晚定制了服務。

搶紅包作為活動核心,如何頂住瞬時洪峰,精準發出 10 億現金。

大部分用戶都會在活動開始的瞬間進入活動並開始搶紅包,考慮到快手龐大的用戶在線數疊加上春晚口播帶來的用戶洪峰,這基本是一個極限流量。按照該流量進行設計不僅需要非常高的資源成本,而且要求更高的系統複雜度和容錯性。為此,快手針對活動特性做了一定程度用戶側感知不到的打散削峰設計:技術和產品一起做了多項針對性設計和優化,既保證用戶的實時參與感,又能確保服務端壓力在可控範圍內。

一輪紅包只有10 分鐘左右,現場幾乎沒有任何修復調整的機會,團隊只能把功夫花在設計實現上,針對各種異常做層層的保護和柔性降級,並通過一系列的故障演練來進行驗證。發錢環節同樣對系統要求極高,幾十分鐘內發出10 億現金,還不能有bug,架構上團隊做了很多精心設計,比如保證核心操作的冪等性、多維度預算控制、多種熔斷檢查、根據流量動態調度發錢速度等能力。

短視頻領域常用的視頻分發方案都是把視頻放到 CDN 上,讓 CDN 去扛流量。這沒什麼毛病,但遇上春晚級別的流量,它就渾身都是毛病。

記者了解到,在全網 CDN 總容量有限的前提下,音視頻技術團隊設計了大規模資源預分發方案,將視頻提前預緩存到客戶端、而非 CDN 上。針對如何優化預分發資源覆蓋率,如何控制帶寬使用量,如何控制下載速度和實際保障用戶體驗,春晚當天視頻素材發生變更如何處理,內容洩露風險如何規避等挑戰,做了一套完整的解決方案。同時針對可能出現的用戶無法播放視頻的極端情況,也設計了一套降級方案:自動將視頻轉換為低碼率或圖片模式,做到用戶側弱感知或無感知,保障核心紅包環節的用戶體驗。

除夕前一天提現頁面增加“助力武漢”紅包捐助功能,短時間內完成高速路上換引擎。

另外據快手研發團隊相關負責人告訴InfoQ 記者,春節前期,新型冠狀病毒肺炎疫情形勢嚴峻,牽動著每一個人的心,正在準備春晚項目的快手團隊商討之後決定在提現頁面增加“助力武漢”的紅包捐贈功能,用戶可以選擇將紅包金額捐助武漢,快手在此金額的基礎上配捐10%,平台聯合用戶一起助力武漢抗擊疫情。確定上線該功能已經是除夕前一天的凌晨,留給開發的時間非常緊迫,經過連夜的開發測試,初一早上 6 點該功能如期上線。

重保穩定性

根據墨菲定律,假設光纖被挖斷的極端情況一定會發生,我們應該怎麼辦?

這是快手同學在一次次演習中,預想的極端場景。雖然這樣的場景聽起來有些“瘋狂”,但為了保證春晚那一刻的絕對可靠,團隊需要把所有異常和災難處理都考慮進去。據了解,快手春晚所有核心服務都設計了多機房容災,在任何單機房或專線故障的時候保證不影響活動。基本所有能想到的異常都有精心設計降級方案,做到層層兜底,力求萬無一失。

春晚所有預案都依賴於配置下發系統,它必須做到將配置低延遲、高可靠地投遞到每一個節點。

在服務端的優化方面,對整個上報鏈路的監控體系全面升級。快手現有的服務上報鏈路是一個多維度、高複雜度的系統,服務的調用量級隨著流量的上升可能呈倍數增長。核心思路是在上報過程中做壓縮和降級,將不重要的數據做歸併,將異常、高延遲數據上報,減輕系統壓力。

配置下發系統也有一整套的監控、加固體系,核心思路是對配置做分級,在系統內多層下發,最終做到進程內緩存,每台物理機都有緩存,一旦出現故障,起碼能拿到一份上一次的數據。

如果春晚是大考,那麼全鏈路壓測就是模擬考。

全鏈路壓測是應對高並發流量洪峰的“核武器”,所有服務的高並發能力都需要通過壓力測試來確定和驗證。除夕活動前的多輪壓測經歷了從小到大,從單接口到單集群再到全鏈路的過程。全鏈路壓測對整個團隊來說,並不是簡單的 QPS 增長,更多的是資源協調、風險把控、結果評估等綜合方面的考驗。其目的就是讓春晚當天應該發生的流量,提前發生,並且驗證系統在該情況下表現是否良好。一次一次的驗證,一次一次的優化,最終確保春晚高並發能力萬無一失。

在進行搶紅包的全鏈路壓測中,不但要驗證系統的高並發能力,還要精確控制並發邏輯,保證紅包分配策略正確。在很多場景下,全鏈路壓測不但需要擔負高並發性能校驗的職責,還要確認超高並發條件下功能是否符合預期。

客戶端優化優化再優化!

春晚活動流量是一把雙刃劍,對於技術團隊來說是一座珠峰,但對產品拉新而言,不啻於坐上了一艘快速升空的火箭。對於客戶端團隊的同學們而言,如何把安裝包極限瘦身以減小應用商店CDN 壓力,並提升用戶下載安裝速度、梳理出客戶端的降級方案、適配複雜的用戶機型,也是一大難題。

經過一個多月的努力,團隊通過資源壓縮、轉移到 CDN、使用上雲工具等十八般武藝,讓客戶端的安裝包瘦身超過 30M,啟動時間降低了 30%。做到了資源、圖片的預下載覆蓋率超過 95%,提升了新用戶的產品體驗。

在系統裡放一隻“猴子”,可勁鬧騰吧!

業界常說架構要做到高並發、高可用。高並發很好理解,高可用卻很難衡量。究竟什麼樣的高可用設計是行之有效的呢?在此以前,這是一種薛定諤的狀態,只有真到出問題的時候,才能得到驗證。 “準備工作再足,也無法完全模擬春晚的突發高流量,這意味著考驗我們的機會只有一次。”快手的做法是用混沌工程的理念做故障注入,核心思路是在包括單機、服務在內的所有服務器上隨機注入不同級別的故障,去模擬部分機器高負載、高延遲導致服務器宕機或半死不活的狀態,從而檢測高可用設計是否行之有效。

音視頻的保障

互聯網的光鮮亮麗好像都在燈紅酒綠的城市之中,鮮為人知的是,中國農村網民的規模已經突破了 2.25 億。在中國農村智能手機上網已經前所未有地普及,但千元機型仍是主流。此外,不同地區互聯網普及程度不一,網速快慢有別,山區和城市的信號不可相提並論,不同機型在性能、屏幕分辨率等方面都存在大大小小的差異。同一個視頻、直播間下,如何讓這些變量不一的網民都能享受到種種限制條件下的最佳體驗效果?

快手音視頻技術團隊利用工程結合算法、數據驅動的理念,從移動端到服務端進行無死角的音視頻體驗優化。用戶在任何地方用任何設備,都可以順暢地拍攝、製作、上傳視頻。

此次春晚快手紅包的核心玩法是:五輪口播時刻點贊一支 45 秒鐘的視頻,並領取紅包。為了保證口播時刻每個用戶都可以流暢地觀看視頻,快手音視頻技術部聯合Y-tech 實驗室,將視頻播放與復雜的動效、音效渲染結合起來,把性能優化到極致:即使在最低端的手機上,也能夠在保證播放視頻零卡頓前提下,同時流暢的進行領紅包特效互動。

此外,在峰值流量時,把幾十 M 大小的 45 秒視頻分發給數億用戶也是不小的挑戰。為了這一目標,快手採用了智能視頻壓縮算法,對數十段視頻內容做畫質增強和壓制。

口播時刻播放的視頻素材取自數百位快手用戶的 UGC 素材,畫質參差不齊。為了保證每一幀的播放效果,需要人工識別各種畫質問題如模糊、塊效應、偏色等,通過算法優化到主觀最佳狀態,最後針對不同的內容和場景複雜度,再輸出盡可能小的視頻文件。為此音視頻團隊配合內容團隊不斷更新素材,視頻素材壓縮和分發工作一直持續到除夕前一晚。

最終,除夕當晚互動次數達到破紀錄的 639 億,單分鐘視頻播放次數過億。

此外,快手 App 對春晚也進行了全程直播。海量用戶湧入活動頁面等待紅包期間,或者搶完紅包回到主頁後,大概率會進入直播間觀看春晚節目。

春晚紅包:史上最難開卷考試,快手交捲了 2

為了保障超高並發直播的穩定性和質量,直播團隊做了大量工作。首先是信號源,主力源採用央視官方信號,備用源從有線電視到衛星信號准備了多路,甚至在員工家裡都架設了備用信號採集設備。各路信號匯總到播控作戰室,由一個專門團隊負責重點保障,保證在任意信號源故障時無縫切換到備播源。在直播分發方面,快手調集了全網的一線 CDN 資源,通過大數據精準調度和質量監測,保障用最高質量的直播流覆蓋全國乃至世界各個角落。

除夕當晚,快手春晚直播間累計觀看人次 7.8 億,最高同時在線人數 2524 萬。

溝通!溝通!溝通!

從 2015 年微信開始做春晚紅包起,每年春晚的應用商店都會受到海量下載請求的衝擊,出現不同程度的服務不可用,我們今年希望他們能夠抗住壓力。

應用市場是春晚活動的一扇大門,如果新安裝用戶在這一步卡住進不來,就不會有機會參與後續紅包活動了。快手今年有專門負責與第三方應用市場溝通的團隊,力保應用商店不出問題。這並不是一件容易的事情,國內應用商店比較碎片化,安卓主要有華為、小米、OPPO、Vivo、魅族、騰訊應用寶等,再加上蘋果App Store,一共七家比較成規模的應用市場需要逐一溝通。

有的應用商店說:這有啥可準備的?基本準備不了。

準備不了也得準備,為了保住應用商店不掛,該團隊挨家挨戶地掃了一遍各大應用商店。這裡的問題在於,App Store 在國內沒有太多商業化,還需要跨國協作難度比較大。

於是團隊帶著完整的方案一起去拜訪了 App Store。春晚流量是什麼級別的?應用商店的瓶頸在哪兒?技術層面的後台架構是怎麼樣的?幾乎把應用商店在這次春晚活動面前要用到的技術全面盤點了一遍,並且將快手自研的曲線擬合技術背後的數據和邏輯共享給了應用商店。

為了保住應用商店,快手團隊需要分資源(CDN、帶寬),給人手(提供技術支持),給方案(講清完整的活動邏輯)。

我們不是說應用商店點頭了就放心了,而是要看到對接的技術部門真的接到需求了才能安心。

在公司內部,溝通同樣不是一件簡單的事兒。

啟動優化環節的兩位負責人,其中一位同學剛入職快手兩週就被拉進了 A1 項目,另外一位則是快手“老司機”。這個組合的關鍵工作之一是與各個業務線溝通,把設計好的降級方案落地下去,死保春晚活動的紅包服務,把其他相對不重要的接口“全部幹掉”。

這個組合在與各個業務線溝通的過程中遇到了很多挫折,但最開始的溝通問題卻是出現在他們內部。那位“老司機“在採訪的時候笑著說:“最開始的時候可煩他了,剛來啥都不懂還指指點點。”隨著項目的深入,兩人信任度逐漸加強,項目團隊形成了強大的凝聚力:“勝則舉杯相慶,敗則拼死相救”,兩人互相扶持前進,在一個多月的時間裡梳理完了業務線涉及啟動的近100 個接口,只留下了個位數的核心接口不做降級。

溝通方式可以有兩種,一種是強勢的一刀切,另一種是深入到業務裡面去,友好溝通。雖然後者實施起來更費勁,但我們還是決定跟業務同學耐心溝通。 “釘子戶”還是有的,最終我們是靠著更高層對齊了目標,推進了下去。

與業務方“鬥智斗勇”,把近 100 個接口乾到只剩個位數,這是外界認為不善溝通的技術人,溝通出來的成果。

一些人的紅包戰,14 億人的春節

每年的春晚紅包活動,都有各大互聯網廠商旗下開發、產品、項目、設計人員們忙碌的身影。這個團隊的規模不可謂不大,有的甚至機房值班人員就能有 500-1000 人。但在 14 億人的春節傳統面前,這些人卻又只是滄海一粟。

IT 技術的價值在於,放大了個體的聲音與價值,讓每個渺小的人都能發出更大的聲音,讓這些千人規模的團隊可以支撐十多億人的高並發熱情。春晚活動發展至今,其背後的技術實力、巧妙的解決方案已經不再是最重要的核心,這群互相扶持、一起攀登珠峰的人和他們背後的故事才是。

這次春晚紅包大戰開始前,我們對每一個接受采訪的快手技術專家都問了同一個問題:“你對這次春晚紅包活動有多少信心?”受訪者坦言,備戰春晚就像跟一群學霸一起準備高考一樣刺激,可能一開始信心只有50%,隨著準備越來越多,信心增加到70% 以及增加到更多;到了備考最後一段時間,覺得該做的事兒、能做的事兒都做了,就差考試了。

雖然內測​​、公測能提前發現一些問題,但春晚當夜高達數億 DAU 的流量卻不可能在前期完全模擬出來,這是一場只有一次機會的技術大考。對於每一個參與其中的技術人來說,所能做的就是守在電腦前面,等待每一次流量尖峰的到來。

快手交捲了,你呢?