摘要:本文由快手開發工程師劉建剛分享,主要介紹春晚活動下快手實時鏈路保障實踐。內容主要包含如下四部分:數據庫
- 快手 Flink 簡介
- 春晚實時保障方案
- 春晚實時大屏
- 將來規劃
Tips:點擊「閱讀原文」連接可查看做者原版 PPT 及分享視頻~緩存
咱們首先來看一下快手的實時計算架構圖。主要分爲4個部分,包括數據接入、數據計算、數據應用和數據展現。各層職責分明、銜接順暢,方便用戶開發。restful
快手的 Flink 集羣規模大概有 3000 多臺機器,日處理條目數爲20萬億,峯值爲38億條。主要應用場景包含如下四類:架構
快手中標了2020年的央視春晚,春晚做爲全球華人辭舊迎新的晚會,數據量之大史無前例。快手 Flink 做爲公司的實時計算平臺,支持春晚超大狀態和千萬併發等複雜計算。春晚項目的挑戰主要體如今穩定性、實時性、準確性三個方面,咱們爲此制定了一系列方案爲春晚保駕護航。併發
下面我會經過這4個方面來介紹一下咱們爲春晚作的努力。運維
Flink 在流量激增或者單點性能不足的狀況下,有可能會發生卡死、雪崩或者失敗的狀況。這個時候一旦咱們的實時做業掛掉,整個做戰計劃就會被打亂,可能給公司帶來很大的損失。機器學習
咱們針對這種場景設計了一種健康檢查、智能限速、源端控制相結合的柔性可用技術。爲何要經過源端控制?首先,若是出了問題,咱們能夠在下游的 task 上進行控制,可是這樣的話可能帶來一個問題,它會形成反壓等阻塞行爲,有可能會把整個做業卡死,因此咱們經過控制數據源來從本質上解決問題。下面是咱們技術實現:分佈式
而後看一下咱們的測試效果圖。流量高峯到來時 QPS 爲 200K。一旦 Master 節點檢測到極端壓力,直接將 QPS 限速到 100K。以後檢測到做業狀態良好,就逐步地進行恢復。通過測試(隨着逐漸恢復各項指標會有波動),咱們的 CPU 使用率從最高的 100% 降到了 80%~90%,ygc 由每分鐘的10秒降到了每分鐘3秒之內,同時也避免了的 oom、心跳超時、卡死等各類問題。這種技術可以保障咱們 Flink 在極度壓力下的存活,起到了削峯保命的效果。工具
咱們還設計了一種輕量級的熱更新模型,在做業不中止的狀況下經過 restful 接口實時的控制做業去應對各類壓力,避免了繁瑣的修改代碼、打包、上線等耗時過程。常見功能包括關閉快照、設置採樣率、source 源鮮素,以下圖所示。性能
分佈式系統涉及到方方面面,任何一個環節出了問題均可能是致命的,咱們爲此在故障應對和項目管理上作了不少工做。故障應對包含故障排除、故障演練、故障預案,項目管理包含做業管理、集羣管理、工程管理。
首先進行的是 Flink 的故障排除。Flink 的交互組件包括 Yarn,HDFS,Kafka,Zookeeper,咱們逐一的對每一個組件進行故障排除。它們各自的風險排除步驟,以下圖中的表格所示。
故障排除完了以後,就須要在真實的場景中進行故障演練。主要的演練方法就是在咱們的集羣中,隨機的注入各類異常來測試而且完善 Flink 的穩定性,確保 Flink 作到如下保障:
爲了更好地應對各類故障,咱們還制定了完善的故障預案,這是一套完整的應急指導方針。針對每一種故障,咱們都有快速的問題排查和解決手段。
除了快速應對故障,良好的管理手段也必不可少,它能夠有效的減小故障。下面介紹咱們管理上的一些手段。
首先是做業管理這一塊,包含做業管理系統的穩定性和相關的運維工做。包括四個方面:
接下來是集羣管理。集羣做爲咱們整個系統的物理載體,一旦出現問題就是致命性的:
最後一個就是工程的管理。工程管理的關鍵是時間線預案,主要是指導咱們在什麼時間點該作什麼事情,貫穿整個項目開發。下面簡單描述了下春晚的事前、事中、過後的主要操做:
壓力測試至關於春晚的一個模擬,它可以幫助咱們發現不少問題。針對春晚,壓力測試比通常的時候要更復雜一些。面臨的最主要的兩個問題,第一個問題就是數據模型怎麼構造,好比說有哪些 topic、各 topic 的數據分佈是怎麼樣的。第二個問題是咱們如何根據這些模型生成符合條件的數據。
數據模型的難點在於構建的數據分佈必須跟春晚保持一致。咱們的解決方案是以人爲參考單位,基於統計規律創建人與數據分佈的映射關係。簡單來講,計算出每一個人在各個 Topic 的數據量,預估有多少人各個 Topic 的 QPS 就翻多少倍,固然實際狀況會複雜許多。最終,咱們根據公測和元旦當天用戶產生的數據來進行春晚模型的創建。
模型構建完成以後,須要根據模型生成數據。爲此,咱們構建了一整套完善的數據生成服務,用戶只須要進行簡單的配置就能夠,而流量控制、多 task 的協做、分佈式生成等複雜的實現所有由平臺實現。主要有三種形式的數據生成:
春晚對數據的實時性要求比較高。只有資源保障到了才能夠實現咱們的實時性。
資源保障的關鍵策略是分級保障。咱們把做業分了三個優先級:P0、P1 和 P2:
爲了作到分級保障,咱們制定了重點保障高優先級做業的降級策略:
經過分級保障,在資源有限的狀況下,優先保障了咱們的重點做業,確保了高優任務的實時消費。分級保障對從此的服務治理意義重大。好比說之後的資源調度、灰度上線、做業遷移等等,均可以參考分級保障的策略。
資源保障的另外一個體如今於快速擴容,分爲實時指標監控和資源選擇兩個方面。實時指標監控包括做業吞吐,做業延時,快照信息,物理信息,經過這4個重要的部分就能夠衡量一個做業是否健康。若是咱們檢測到做業有性能問題須要擴容,須要按照必定順序選擇資源來補充——集羣內冗餘資源,備用集羣,低優任務資源。
下面咱們以實時大屏做爲經典案例來介紹。快手春晚實時大屏爲做戰指揮官提供最核心的活動和公司大盤實時數據,總共承接了100多個實時指標的計算,包括在線、紅包、互動等各項指標。主要的挑戰表如今三個方面:
接下來我會從技術選型、壓力測試、服務部署三個方面順序展開。
架構組件是以 Flink 爲主,Redis 爲輔。Flink 適合大規模的實時計算,Redis 做爲一款高效的 KV 查詢工具來輔助實時計算。
各項指標中,基於 deviceld 的 UV 計算最多、複雜度最高。通常來講,先將字符串類型的 deviceId 轉成數字類型的 id,而後存儲在位圖結構 bitmap(存儲空間小)中進行計算。這裏介紹下快手的技術方案:
前面兩種方案將字典和計算解耦,適合多個做業共享一個字典。最後一種方式再也不依賴外部系統,性能最佳。實時大屏根據本身需求和熟練度選擇了第二種方案。
壓力測試分爲單做業的壓測和全鏈路的壓測。
最後一步是多鏈路的服務部署。實時大屏做業的穩定性要求特別高,必須多鏈路熱備:
上面是春晚實時大屏案例的介紹,下面也跟你們分享一下咱們未來的一些規劃:
文章不夠看?點擊「閱讀原文」可直接回顧做者現場分享的講解視頻~