概念界定
什麼是超高併發?簡單點說就是在一瞬間有幾百萬或者上千萬或者上億的流量湧入;
有哪些超高併發的場景?舉幾個例子:2019德雲社鋼絲節搶票,2019年張雲雷/楊九郎相聲專場搶票、2019年春晚搶紅包、2019雙十一購物節、12306春運搶票等
一、核心鏈路的梳理及識別,保主幹流程,犧牲分支流程產品經理需要在活動開始前至少一個版本識別出核心鏈路,比如淘寶電商的核心流程可能是從搜尋頁/購物車/我的收藏/直播視訊等入口進入商品詳情頁開始,一直到支付完成訂單的整個流程。
負責這件事情的產品經理需要對整個系統非常熟悉(在淘寶雙十一這個場景下可能需要熟悉到資料庫的某個欄位有什麼用的程度),把請求返回的冗餘欄位拿掉,把影響體驗的細節優化好,把漏洞修復,保證整個核心鏈路沒有任何問題;
並且,可能需要依次定義出來其他功能的重要性程度,研發需要依賴這個排序,在活動開始之後,視具體的流量情況做取捨,按照重要性從低到高依次停止部分功能的使用;
為什麼要做取捨,稍微解釋下,向淘寶雙十一也是今年才完全上雲,可以動態分配一些運維的資源,但在此前,可能需要按照預估的流量去準備伺服器準備頻寬之類的,萬一估計的比實際流量差很多系統會掛掉,所以,在掛掉之前需要做減法;
舉個例子,即使像淘寶這麼牛逼的技術,2018年春晚上央視發紅包也被搞崩了,原因就是估計不足,春晚的流量可能是雙十一的十幾倍,具體看下知乎問答“如何看待 2018 年春晚直播期間「淘寶崩潰事件」”
二、 頁面一步或者多步限流頁面限流這個比較好理解,就是對具體的頁面進行流量的限制,當流量超過限制的時候,無法使用。
核心鏈路中的限流都會有對應的開關以及閾值配置,平常可能不會開啟限流或者及時開啟閾值也會設定的較低(考慮到運維資源的配置)
在大型活動開始前,開啟限流開關,由整個團隊一據預估峰值流量來配置相關的伺服器等資源,根據這些資源計算出來系統能夠支撐的閾值上限。
當訪問流量達到閾值或者閾值的百分之多少的時候,自動觸發限流,系統繼續保障限流之前進入的使用者完成後續流程,被限流的使用者按照進入排隊的順序先後提供服務。
一步或者多步的限流區別就在於在整個流程中需要限流幾次,如果瞬時流量特別大,但是資源準備又沒那麼充分(資源都是錢),可以考慮多步限流。
三、強行分散流量
什麼叫強行分散流量,其實就是將瞬時湧入頁面的100萬流量分散到5個頁面上去,每個頁面只需要承擔20萬的流量達到分流的目的。
舉個例子,以2019年貓眼上張雲雷/楊九郎為例,貓眼的APP強行在演出的商品詳情頁和下一步中間的選場次票面頁中間插入了一個答題頁面,答不上來或者操作的慢的就會卡在當前頁面;
四、減少實時計算,減少圖片等資源的實時獲取
a)減少實時計算,是指使用者在進入某個頁面的時候,直接從後臺獲取已經處理好或者直接錄入的資料,不要進行二次計算,每一次計算會消耗系統資源,一兩個人感知還不太明顯,幾百萬人就會嚴重影響系統的流暢程度和穩定性。
舉個例子,以前12306春運搶票就是使用者在購票的時候系統進行了實時計算,所以基本沒到春運期間不夠流暢甚至不可用。
b)減少圖片等資源的實時獲取,是指使用者在進入某個頁面的時候,最好不要從後臺實時載入大的檔案資源,一個高清圖片可能要3-5M,一個小視訊也得需要幾兆,這些都會消耗系統的頻寬資源以及效能,導致使用者載入不出來資料。尤其是做資訊流產品的,最好是能夠做到提前載入,在活動開始前就載入到本地來,活動開始之後直接用本地的資源。