主頁 > 軟體設計 > 直播CDN調度技術關鍵挑戰與架構設計

直播CDN調度技術關鍵挑戰與架構設計

2022-11-17 07:08:54 軟體設計

作者:胡濟麟

1、背景介紹

1.1 直播業務特點

互聯網視頻直播是一種訊息媒介形態,提供時產時消的內容,經過多年,已經發展出秀場、游戲、電商、體育等多種業務形態,主要特點是:內容實時產生實時消費,對時效性要求更高;流媒體內容占用帶寬大,對網路質量要求更苛刻;一人生產、多人消費,帶寬規模大,直播 CDN 目前是解決這種大規模分發場景最有效的技術途徑,主要特點是就近接入以提供良好的接入網環境,多層匯聚以降低中心資源的分發壓力,以此達到直播業務規模化和時效性的要求,

1.2 直播 CDN 面臨的困難

由于直播業務本身對于質量和時效性的要求,CDN 就需要在短時間內要找到并建立一條完整可靠的傳輸鏈路,對于鏈路穩定性有一定的要求,傳統依賴于旁路更新的、基于鏈路質量的策略,尋路演算法簡單,不消耗太多時間,時效性有保障,但隨著成本壓力越來越大和可用性的要求越來越高,基于鏈路質量的策略的缺點就逐漸體現出來:

一個是這種旁路策略第一策略時效性上存在一定的延遲,延遲大約 2-3 分鐘,對于偶發性的質量惡化或資源偏壓無法快速做出相應的策略調整;

第二是基于一套統一的鏈路質量資料,無法兼顧資源能效,對于一些能效低的內容無法基于成本考慮做出相應的尋路策略調整,對浮動成本的控制不夠精確,

1.3 解決方案

基于資源資訊、鏈路狀態、流媒體資訊等多維度資料,精確計算每一路流的分發效能,將計算粒度精確到流一級,通過對能效、質量的綜合計算,為每一路流動態計算接入和回源策略是解決困難的關鍵,

圖 1. 干系方

 

調度系統通過收集、結合資源資訊、鏈路狀態、流媒體資訊等,對直播接入和尋路進行控制,快速精確的調整策略,提供質量優先、成本優先、質量成本平衡等多種策略,對于在質量指標評價體系下提升分發系統的可用性和能效比提供更加精準和細粒度的控制,

  • 內容平臺:內容平臺的核心目的就是提高質量,只有提高質量流量才有保障,一套精細化的調度系統,能夠做到精確接入,提升網路覆寫的準確度,快速處理短時故障,降低流量流失風險,
  • CDN:CDN 主要目標是提高質量,降低成本,調度系統能夠精確控制接入網準確度,提高接入質量,對流量進行精細化調度,提高資源復用率,降低浮動成本,進而執導建設規劃,降低固定成本,

 

2、主要問題及挑戰

2.1 時效性的要求

  • 接入調度要求對業務阻塞時長不超過 50ms
  • 尋路調度要求全路徑上阻塞時長不超過 50ms
  • 流媒體資訊同步延遲不超過 100ms
  • 設備資訊、網路質量同步延遲不超過 10s

2.1.1 調度延遲控制

延遲不超過 50ms,考慮到公網的網路本身的傳輸延遲,基本上不會有多余的時間進行其他系統呼叫和計算,需要預先準備好回應的策略,并且調度接入位置要盡量靠近呼叫側,設計了策略推送、策略快取、異步更新三種功能,

  • 策略推送功能在資源調度系統生成好調度策略之后,通過推送方式直接推送到接入層,接入層不主動呼叫其他系統,直接使用推送的調度計劃回傳給業務方,接入層沒有業務處理延遲,
  • 策略快取功能在接入層收到推送調度計劃之后做記憶體快取,本地不落磁盤,只有推送或者異步更新觸發快取更新,調度請求直接回傳快取資料,
  • 異步更新是在介面主動定時向資源調度發起請求獲取調度資料,防止推送失敗,

2.1.2 資訊同步延遲控制

由于流媒體資訊同步延遲要求 100ms,考慮公網網路傳輸的延遲,定時采集上報的方式無法滿足延遲要求,采用事件觸發實時 API 上報的方式同步資料,設備資訊、節點資訊為介面呼叫方式取回,對于時效性要求不高,采用任務分派機制,防止資料重復取回,

  • 事件觸發在開始、停止等事件邊沿上,同步呼叫 API 上送流媒體資訊,保障流媒體資訊同步的及時性,
  • API 直連觸發后端業務處理,不再經過中間件,節省中間件處理延遲,
  • 任務分派機制將資料查詢任務通過 MQ 分派給不同的服務實體,每個實體在認領完任務之后負責將資料取回,

2.2 可用性要求

  • 客戶之間互不影響
  • 詢源調度和接入調度互不影響
  • 回應例外退化策略保障

2.2.1 介面可用性

隔離

用戶隔離

  • 客戶一般采用 id 來區別身份,部分大客戶可能有獨立的接入域名,以 id 和域名為維度,部署獨立的計算資源,防止單個客戶訪問對全體客戶造成影響,
  • 考慮到成本和可用性,大客戶除了獨立部署資源外,還需要在常規集群中也部署相應功能,提供主備資源保障,

業務隔離

  • 回源調度和接入調度的業務方不同,對調度的回應能力和例外處理方式也不相同,調度失效的影響范圍和收益也不相同,因此按照業務方進行隔離,內容平臺和 CDN 分別在不同的接入實體上,方便對單個業務進行擴展,也可控制業務例外影響范圍,

限流

當系統負載過高時,保護系統服務,提升系統恢復速度,降低系統負載,需要對系統業務流量進行限制,

熔斷

并發熔斷

  • 系統中存在很多介面呼叫的場景,比如統一接入呼叫資源調度介面獲取調度計劃,資源調度呼叫資訊采集獲取基礎資料等,為保障后端業務服務穩定性,防止后端業務被突發增量打死,需要對后端業務并發數進行熔斷,超過額定并發之后,不再允許呼叫后端介面,監控系統拋出例外,前端業務依據故障處理機制容忍一定的故障請求,超過容忍額度則退化到兜底策略,

失敗率熔斷

  • 后端業務可能短時處于不可用狀態,降低后端業務在短時不可用時的請求量,能夠加速后端業務恢復,當呼叫后端介面失敗率高于閥值后,一段時間內不再呼叫后端介面,超過額定時間則繼續探測后端業務可用性,直到業務恢復,

2.2.2 退化策略

無法在進行接入和詢源調度服務時,需要退化為默認兜底策略,接入退化為 DNS 決議方式,詢源退化為 CDN 固定詢源策略,不再依賴調度系統做策略選擇,

 

3、調度系統架構

3.1 業務架構

圖 2. 業務架構

調度系統分為統一接入、運管平臺、資源調度、資訊采集、日志系統五個部分,

  • 統一接入:為內容平臺提供中心化標準接入能力,考慮性能及延遲消耗,為 CDN 的邊緣實體、二級源實體提供下沉 agent 接入能力,
  • 運管平臺:運管平臺作為人工界面,主要提供配置能力和資料大屏,
  • 資源調度:資源調度作為調度系統的核心單元,依據多種輸入條件,針對接入和詢源兩種業務模式,輸出不同的調度計劃,
  • 資訊采集:資訊采集作為資料底座,為資源調度提供必要的質量、能力、位置等輸入資訊,
  • 日志系統:日志系統提供時序化的記錄方式用于記錄調度資訊,主要用于復盤和評價調度策略,

 

3.2 資訊采集系統

圖 3. 資訊采集系統業務架構

資訊采集系統作為調度系統的資料底座,主要功能是從運維系統收集設備資源情況、從業務系統收集流媒體資訊,經過資料整合之后提供給資源調度使用,

資訊采集系統通過主動定時呼叫運維系統介面采集設備運行資料,包括 CPU 使用率、記憶體使用率、磁盤 IO、網路 IO 等資訊,用于評價設備的服務能力,采集節點帶寬用量等資訊,用于評價節點承載能力,

通過主動定時呼叫監控系統介面采集鏈路質量資料,包括 RTT,丟包率等資訊,用于評價網路質量,

通過被動等待 CDN 業務實體上報流媒體資源位置、下行并發、卡頓率等資訊,用于評價服務質量和服務收益,

這些資訊被收集上來之后通過分類整合,按照節點、地區、運營商、業務形式等不同維度,形成服務能力、服務質量、服務收益的聚合資料,

聚合資料最侄訓通過查詢介面提供給資源調度系統,

3.3 資源調度系統

圖 4. 資源調度系統業務架構

資源調度作為調度系統核心業務模塊,主要從資訊采集收取必要調度依據,通過一套調度策略,輸出調度計劃提供給接入和詢源業務,

資源調度系統主要通過運管平臺將個性化調度配置資訊落到資源調度系統,通過查詢資訊采集介面,查詢所需要的服務能力、服務質量、服務收益等資訊,通過匹配不同的調度策略,生成靜態調度計劃,

通過查詢資訊采集介面,查詢流媒體資源位置及描述資訊,通過匹配調度策略,生成動態調度計劃,

最終調度計劃會以介面方式提供給業務方使用,

3.4 技術架構

圖 5. 技術架構

3.5 部署方案

圖 6. 部署方案

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/535252.html

標籤:其他

上一篇:第2-3-3章 檔案處理策略-檔案存盤服務系統-nginx/fastDFS/minio/阿里云oss/七牛云oss

下一篇:選擇非空白的隨機單元格

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more